《6-检查型异常 自定义异常.docx》由会员分享,可在线阅读,更多相关《6-检查型异常 自定义异常.docx(8页珍藏版)》请在第壹文秘上搜索。
1、6-检查型异样自定义异样2、检查型异样(1)处理方式:throws(抛出):消极处理方式,产生异样中断执行程序trycatch(捕获):主动处理方式,产生异样捕获后,接着执行程序例1:throws(抛出)在方法头部声明可能抛出的检查型异样importjava.io.*;classdemopublicstaticvoidmain(Stringaigs)throwsExceptionInputStreamin=newFiIeInputStream(d:d.txt);/创建文件输入流对象Throwable类中供应了PrintStaCkTraCe()方法,用来跟踪异样事务发生时执行堆栈的内容。还供应了
2、getMassage()方法,用来得到有关异样事务的信息。例2:Print.StackTraceO方法importjava.io.*;classdemopublicstaticvoidmain(Stringargs)tryInputStreamin=newFileInputStream(d:d.txt);创建文件输入流对象catch(Exceptionex)ex.rintStackTrace():输出异样信息例3:importjava.io.*:classdemopublicstaticvoidmain(Stringargs)tryInputStreamin=newFilelnputStrea
3、m(dAd.txt);创建文件输入流对象catch(Exceptionex)System.out.printin(hello!);结果是:hello!例4:gclMessage()方法importjava,io.*;classdemopublicstaticvoidmain(Stringargs)inti=0:tryi=30;catch(Exceptionex)System,out.printin(异样是+ex.getMessage();获得异样信息System.out.printin(接着执行);结果:异样是/byzero接着执行(2)捕获的依次:一个try对应多个catch,先子类后父类,
4、(从小到大的依次)。假如子类已经捕获处理,则父类不再处理。无论异样是否产生,finally语句块的内容都将被执行(特点)finally语句块的作用:可以防止资源泄露;给程序一个统一的出口finally语句块内部可以有IryCaICh如I:tryCateh(异样类型1异样类型的对象)捕获异样之后要处理的内容finallyt1yCateh(异样类型2异样类型的对象)例:importjava.io.*;classdemopublicstaticvoidmain(Stringargs)throwsExceptiontryInputStreamin=11ewFiIeInputStream(d:d.txt
5、);catch(IOExceptionio)io.PrintStackTraceO:catch(Exceptionex)ex.printStackTrace();finallySystem,out.printin(over):(3)常见的检查型异样有:包java.Iang中声明的标准检查型异样ClassNotFoundExccption指定名字的类或接口未找到。CloneNotsupportedException不支持克隆异样,当某对象调用了Object类中的方法Clone时,而该对象所在的类未实现接口Cloneablee111ega1AccessException在调用某方法时,找不到该方法
6、的声明。例如,某方法在另一个包的类中声明,而该方法未声明为publicInstantiationException实例化异样。试图创建抽象类或接口的对象。InterruptedException中断异样。其他线程中断了当前线程包javaio中声明的标准检查型异样java.io.IOException输入输出异样java.io.EOFException文件结束异样java.io.FileNotFoundException未找到文件java.io.InterruptedIOExceptionI/O中断异样java.io.UTEDataFormatExceptionUnicode文本格式的数据格式错
7、误包中声明的标准枪瓷型异样.MalformedUR1.Exception出现了一个不完整的UR.ProtocolException网络协议的某些方面执行有误.SocketException与某套接有关的操作无法正常完成.UnknowHostException网络客户方指出的服务器IP地址有误.UnknowserviceException发生了不支持的服务3、自定义异样:作用:利于后期维护例1:importjava.io.*:classGreetpublicvoidgreeting(Stringname)throwsException声明异样if(name,equals(藏独分子)throwne
8、wException(这是藏独分子);System.out.printin(欢迎+name);classdemopublicstaticvoidmain(Stringargs)tryGreetg=newGreet();g.greeting(藏独分子);catch(Exceptionex)ex.PrintStackTraceO;或写成:System,out.printIn(ex.getMessage();成员变量Message通过构造方法赋值的例:成员变量m通过构造方法赋值的classStringm;A(Strings)m=s;StringgctM()returnm;classBpublicst
9、aticvoidmain(Stringargs)a=newA(大家好);System.out.printIn(a.getM();例2:自定义一个异样类MyException继承Exceptionimportjava.io.*;classMyExceptionextendsExceptionMyException(Strings)super(三);classGreetpublicvoidgreeting(Stringname)throwsMyException声明异样if(name,equals(藏独分子)thrownewMyEXCePiion(这是藏独分子);System,out.printI
10、n(欢迎+name):classdemopublicstaticvoidmain(Stringargs)tryGreetg=newGreetO;g.greeting(藏独分子);catch(MyExceptionex)ex.PrintStackTraceO;throws(抛出异样)和throw(抛弃异样)的区分:(1)前者抛出异样类型,可同时抛出多个异样类型,用逗号分隔;后者后面跟的是异样类型的对象,同一时间内只能抛弃一个对象(2)前者放在方法头部,后者放在方法体中(3)后者不行单独出现,要么和throws连用,要么和trycatchfinally连用。前者可单独出现。throws(抛出异样)
11、和throw(抛弃异样)在什么状况下运用:本类的本方法体内部没有方法处理或不想处理所生成的异样时,运用throws抛出或throw抛弃给调用者。在以下两种状况下,用户必需在设计的方法头中列出可能抛出的异样。在方法体中调用了会抛出检查型异样的方法,例如,如果在方法体中调用了SyStenl.in.read(),那么在方法头中应声明throwsTOException在方法体中运用throw语句抛出检查型异样,在方法头中应声明抛出的异样例3:importjava.io.*;classXiaoXueExceptionextendsExceptionXiaoXueException(Strings)sup
12、er(三);classSuanShupublicintadd(inti,intj)throwsXiaoXueException声明异样if(i+j)1000000)thrownewXiaoXueExceplion(难度超出小学3年级范围);demopublicstaticvoidSuanShus=newintsum=s.add(l,2000000):)ex)P153例5.12异extendsException臼定义异super(三);classdemoThrow(Strings)throwsif(s.equals(welcome)if(s.equals(bug)returni+j;)class
13、main(Stringargs)trySuanShuO;System,out.printin(sum);catch(XiaoXueExceptionex.PrintStackTraceO样处理的例子classMyException样MyException(Strings)TryAndCatchAstaticintMyException/声明抛出异样System,out.printIn(三)thrownewMyException(abug);在方法中抛出异样returns.IengthO;publicstaticvoidmain(Stringargs)for(inti=0;iargs.lengt
14、h;i+)trySystem,out.printin(demoThrow(argsi):System.out.printin();catch(MyExceptione)System,err.printin(e.getMessage();finallySystem.out.printin(cleanup.);练习:从吩咐行参数输入一个Elnail地址。推断是否合法,合法的将其输出,非法的将其当作一个异样,并进行处理,提示给客户:Emai1地址非法,请重新输入CIaSSMyExceptionextendsExceptionMyException(Strings)super(三);classEmai1DemostaticvoiddemoThrow(StringS)throwsMyExceptioninti=s.indexf(Q):if(i=0s.indexf(1i+.lengthO)0)System.out.printin(三):elsethrownewMyException(Email地址不合法,请重新输入);pubicstaticvoidmain(Stringargs)trydemoThrow(args0);catch(MyExceptione)System.out.println(e.getMessage();作业:将上面的程序修改,合法的Email地址将用户名输出,网