6-检查型异常 自定义异常_第1页
6-检查型异常 自定义异常_第2页
6-检查型异常 自定义异常_第3页
6-检查型异常 自定义异常_第4页
6-检查型异常 自定义异常_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1/16-检查型异常自定义异常2、检查型异常(1)处理方式:

throws(抛出):

消极处理方式,产生异常中断执行程序trycatch(捕获):

积极处理方式,产生异常捕获后,继续执行程序例1:

throws(抛出)在方法头部声明可能抛出的检查型异常importjava.io.*;classdemo{publicstaticvoidmain(Stringargs[])throwsException{InputStreamin=newFileInputStream(d:\\d.txt);//创建文件输入流对象}}Throwable类中提供了printStackTrace()方法,用来跟踪异常事件发生时执行堆栈的内容。

还提供了getMassage()方法,用来得到有关异常事件的信息。

例2:

printStackTrace()方法importjava.io.*;classdemo{publicstaticvoidmain(Stringargs[]){try{InputStreamin=newFileInputStream(d:\\d.txt);//创建文件输入流对象}catch(Exceptionex){ex.printStackTrace();//输出异常信息}}}例3:

importjava.io.*;classdemo{publicstaticvoidmain(Stringargs[]){try{InputStreamin=newFileInputStream(d:\\d.txt);//创建文件输入流对象}catch(Exceptionex){}System.out.println(hello!);}}结果是:

hello!例4:

getMessage()方法importjava.io.*;classdemo{publicstaticvoidmain(Stringargs[]){inti=0;try{i=3/0;}catch(Exceptionex){System.out.println(异常是+ex.getMessage());//获得异常信息}System.out.println(继续执行);}}结果:

异常是/byzero继续执行(2)捕获的顺序:

一个try对应多个catch,先子类后父类,(从小到大的顺序)。

如果子类已经捕获处理,则父类不再处理。

无论异常是否产生,finally语句块的内容都将被执行(特点)finally语句块的作用:

可以防止资源泄露;给程序一个统一的出口finally语句块内部可以有trycatch如:

try{}catch(异常类型1异常类型的对象){捕获异常之后要处理的内容}finally{try{}catch(异常类型2异常类型的对象){}}例:

importjava.io.*;classdemo{publicstaticvoidmain(Stringargs[])throwsException{try{InputStreamin=newFileInputStream(d:\\d.txt);}catch(IOExceptionio){io.printStackTrace();}catch(Exceptionex){ex.printStackTrace();}finally{System.out.println(over);}}}(3)常见的检查型异常有:

①包java.lang中声明的标准检查型异常ClassNotFoundException指定名字的类或接口未找到。

CloneNotSupportedException不支持克隆异常,当某对象调用了Object类中的方法clone时,而该对象所在的类未实现接口Cloneable。

IllegalAccessException在调用某方法时,找不到该方法的声明。

例如,某方法在另一个包的类中声明,而该方法未声明为publicInstantiationException实例化异常。

试图创建抽象类或接口的对象。

InterruptedException中断异常。

其他线程中断了当前线程②包java.io中声明的标准检查型异常java.io.IOException输入输出异常java.io.EOFException文件结束异常java.io.FileNotFoundException未找到文件java.io.InterruptedIOExceptionI/O中断异常java.io.UTFDataFormatExceptionUnicode文本格式的数据格式错误③包中声明的标准检查型异常.MalformedURLException出现了一个不完整的URL.ProtocolException网络协议的某些方面执行有误.SocketException与某套接有关的操作无法正常完成.UnknowHostException网络客户方指出的服务器IP地址有误.UnknowServiceException发生了不支持的服务3、自定义异常:

作用:

利于后期维护例1:

importjava.io.*;classGreet{publicvoidgreeting(Stringname)throwsException//声明异常{if(name.equals(藏独分子)){thrownewException(这是藏独分子);}System.out.println(欢迎+name);}}classdemo{publicstaticvoidmain(Stringargs[]){try{Greetg=newGreet();g.greeting(藏独分子);}catch(Exceptionex){ex.printStackTrace();//或写成:

System.out.println(ex.getMessage());}}}成员变量Message通过构造方法赋值的例:

成员变量m通过构造方法赋值的classA{Stringm;A(Strings){m=s;}StringgetM(){returnm;}}classB{publicstaticvoidmain(Stringargs[]){Aa=newA(大家好);System.out.println(a.getM());}}例2:

自定义一个异常类MyException继承Exceptionimportjava.io.*;classMyExceptionextendsException{MyException(Strings){super(s);}}classGreet{publicvoidgreeting(Stringname)throwsMyException//声明异常{if(name.equals(藏独分子)){thrownewMyException(这是藏独分子);}System.out.println(欢迎+name);}}classdemo{publicstaticvoidmain(Stringargs[]){try{Greetg=newGreet();g.greeting(藏独分子);}catch(MyExceptionex){ex.printStackTrace();}}}throws(抛出异常)和throw(抛弃异常)的区别:(1)前者抛出异常类型,可同时抛出多个异常类型,用逗号分隔;后者后面跟的是异常类型的对象,同一时间内只能抛弃一个对象(2)前者放在方法头部,后者放在方法体中(3)后者不可单独出现,要么和throws连用,要么和trycatchfinally连用。

前者可单独出现。

throws(抛出异常)和throw(抛弃异常)在什么情况下使用:

本类的本方法体内部没有办法处理或不想处理所生成的异常时,使用throws抛出或throw抛弃给调用者。

在以下两种情况下,用户必须在设计的方法头中列出可能抛出的异常。

在方法体中调用了会抛出检查型异常的方法,例如,如果在方法体中调用了System.in.read(),那么在方法头中应声明throwsIOException在方法体中使用throw语句抛出检查型异常,在方法头中应声明抛出的异常例3:

importjava.io.*;classXiaoXueExceptionextendsException{XiaoXueException(Strings){super(s);}}classSuanShu{publicintadd(inti,intj)throwsXiaoXueException//声明异常{if((i+j)1000000){thrownewXiaoXueException(难度超出小学3年级范围);}returni+j;}}classdemo{publicstaticvoidmain(Stringargs[]){try{SuanShus=newSuanShu();intsum=s.add(1,2000000);System.out.println(sum);}catch(XiaoXueExceptionex){ex.printStackTrace();}}}P153例5.12异常处理的例子classMyExceptionextendsException//自定义异常{MyException(Strings){super(s);}}classTryAndCatchA{staticintdemoThrow(Strings)throwsMyException//声明抛出异常{if(s.equals(welcome)){System.out.println(s);}if(s.equals(bug)){thrownewMyException(abug);//在方法中抛出异常}returns.length();}publicstaticvoidmain(Stringargs[]){for(inti=0;iargs.length;i++){try{System.out.println(demoThrow(args[i]));System.out.println(___);}catch(MyExceptione){System.err.println(e.getMessage());}finally{System.out.println(cleanup...);}}}}练习:

从命令行参数输入一个Email地址。

判断是否合法,合法的将其输出,非法的将其当作一个异常,并进行处理,提示给客户:

Email地址非法,请重新输入classMyExceptionextendsException{MyException(Strings){super(s);}}classEmailDemo{staticvoiddemoThrow(Strings)throwsMyException{inti=s.indexOf(@);if(i=0s.indexOf(@,i+@.length())0){System.out.println(s);}else{thrownewMyException(Email地址不合法,请重新输入);}}publicstaticvoidmain(Stringargs[]){try{demoThrow(args[0]);}catch(MyExceptione){System.out.println(e.getMessage());}}}作业:

将上面的程序修改,合法的Email地址将用户名输出,网址名输出,不合法当作异常处理。

显示异常出现在哪里(用户名、网址、@、.com)classMyExceptionextendsException{MyException(Strings){super(s);}}classEmailTest{publicstaticvoidtestEmail(Strings){try{inti=s.inde

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论