《Java中异常处理.docx》由会员分享,可在线阅读,更多相关《Java中异常处理.docx(12页珍藏版)》请在第一文库网上搜索。
1、第13章异常课堂练习(2理论+2习题课+2上机)【教学目标】 了解异常和异常处理的概貌(第13.2节)。探究使用异常处理的优点(第13.3节)。区别异常的类型:Ri(致命的)和EXCemion(非致命的),以及必检和免检异常(第13.4节)。 在方法头中声明异常(第节)。在方法中抛出异常(第节)。 编写try-catch块处理异常(第节)。 解释异常是如何传播的(第节)。 在trvcatch块中使用Rna1IV子句(第13.6节)。只为非预期错误使用异常(第13.7节)。在闻电块中重新抛出异常(第13.8节)o 创建链式异常(第13.9节)。 定义自定制的异常类(第13.10节)。【教学重点】
2、了解异常的处理机制 异常的解决方法 Exception类的作用及其使用方法必检异常、免检异常的特点【基本知识点】1、常见异常演示(1)算数异常:在算术运算中,0作为除数时,系统将产生该异常,示例:pub1icstaticvoidmain(Stringargs)intx=10;inty=0;intm=xy;Exceptioninthreadmain:/byzeroatexception.NotChecketException.main(NOtCheCketEXCePtiOn.java:7)在数组下标越界时,将产生该异常,示例:pub1icstaticvoidmain(Stringargs)int
3、arr=1,2,3;System.out.printin(arr3);)Exceptioninthread,main:3atexception.NotChecketException.main(NotCheCketEXCePtiOn.java:6)(3)数组存储异常:java.1ang.ArrayStoreException在数组中存入与之声明类型不符的类型,将产生该异常,示例:pub1icstaticvoidmain(Stringargs)boo1eanbfa1se,true,fa1se;intattr=1,2,3;System.arraycopy(attr,O,b,O,1);)Except
4、ioninthreadmainatjava.1ang.System.arraycopy(NatiVeMethod)atexception.NotChecketException.main(NotCheCketEXCePtion.java:7)将对象A转换成为对象B时,如果A既不是与B同一个类,也不是B的子类,将产生该异常,示例:pub1icstaticvoidmain(Stringargs)Objectobj=newObject();intin=(int)obj;Exceptioninthread,main:java.1ang.ObjectcannotbecasttoIatexception.
5、NotChecketException.main(NotCheCketEXCePtion.java:6)引用空对象的实例或方法时,将产生该异常。示例:pub1icstaticvoidmain(Stringargs)Stringstr=nu11;System.out.printin(str.1ength();Exceptioninthreadmain2、try.catch语句捕获异常pub1icc1assExceptionDemo1pub1icstaticvoidmain(Stringargs)inti=1,2,3);try(System,out.printIn(iO=,*+iO);System
6、.out.printIn(,i3=+i3);catch(Array1ndexoutofBoundsExceptione)SVStem.out.printin(出现异常”e.getMessage();)System.out.printIn(i1=+i1);)iO=1出现异常3i1=2以上面的程序运行结果可以发现,在程序中加入异常处理代码后,当异常发生时,整个程序没有因为异常的出现而中断执行。3try.CatChfina11y语句捕获异常pub1icc1assExceptionDemo4pub1icstaticvoidmain(String)args)inti=1,2,3);try(System.
7、out.printIn(ui0=+iO);System.out.printIn(ui3=+i3);catch(Array1ndexOutOfBoundsExceptione)SyStem.out.printin(出现异常+e.getMessage();fina11ySystem.out.printin(,无论是否有异常,都会执行fina11y语句*,);)System.out.printIn(ui1=+i1);iO=1出现异常3无论是否有异常,都会执行fina11y语句i1=2其中,不论try代码块中发生了哪种异常,也不论try代码块和CatCh代码块是否可以正常执行,fina11y代码块都保
8、证会执行。即使前面的ty.CatCh代码块都无法捕获这个异常,或者在CatCh代码块中还有其他异常产生,在将新的异常传递给java运行时环境之前都会先执行fina11y代码块。4、多个catch代码块pub1icc1assExceptionDemoSpub1icstaticvoidmain(Stringargs)Fi1eReaderfr=nu11;try(fr=newFi1eReader(test.txt);fr.read();catch(Fi1eNotFoundExceptione)/TODOAuto-generatedcatchb1ocke.printStackTrace();catch(
9、IOExceptione)/TODOAuto-generatedcatchb1ocke.printStackTrace();fina11ytry(fr.c1ose();catch(IOExceptione)/TODOAuto-generatedcatchb1ocke.printStackTrace();)使用多个CatCh语句块的时候,请注意CatCh代码块的排顺序问题。CatCh代码块捕获异常是按照顺序的,如果前面已经有一个异常类型被捕获了,但又同时满足后面的异常类型时,就不会被捕获了。5、在调用方法出处理被抛出的异常pub1icc1assException6pub1icstaticvoid
10、arrExcetion()throwsIOExceptionFi1eReaderfr=newFiIeReader(不存在的文档.txt”);fr.c1ose();)pub1icstaticvoidmain(Stringargs)tryarrException();catch(IOExceptione)/TODOAuto-generatedcatchb1ocke.PrintStackTrace();)在上面的程序中,“不存在的文档”表示在同一个目录下没有该文档。当arrException()方法产生了异常,此方法并不作处理,而是交由调用arrException()方法的main方法处理。6、错误
11、的使用throws6pub1icc1assExceptionDemo?pub1icstaticvoidQrrEXCeP七ion。throwsFXCePtiOnFi1eReaderFr-newFi1eReQder(”不存在的文档.七xt);9 fr.c1ose();10 )pub1icstaticvoidmain(StringQrgS)12 tryQ1314自151617181920烈期c3.i;catch(IOExceptione)/TODOAuto-generatedcatchb1ocke.printStackTrace();)arrException()方法的main方法能处理的异常范围大
12、,所以编译错误。7、主方法main使用throws关键字pub1icc1assExceptionDemo8pub1icstaticvoidarrException()throwsExceptionFi1eReaderfr=newFiIeReader(不存在的文档.txt);fr.c1ose();pub1icstaticvoidmain(Stringargs)throwsExceptionarrException();Exceptioninthreadmain”:不存在的文档.txt(Nosuchfi1eordirectory)atjava.io.Fi1eInputStream.open(Nat
13、iVeMethQd)atjava.io.Fi1eInputStream.(Fi1eInputStream.java:146)atjava.io.Fi1eInputStream.(Fi1eInputStreamJava:101)atjava.io.Fi1eReader.(Fi1eReader.java:58)atexception.ExceptionDemoS.arrException(EXCePtionDemo8.java:8)atexception.ExceptionDemoS.main(ExceptionDemo8.java:12)8、若需要在程序中自行抛出异常,可以使用throw关键字。
14、ThrOW语句可以单独使用,用于方法体内部,throw抛出的是异常类的实例。如果抛出了检查异常,则还应该在方法头部声明方法可能抛出的异常类型,该方法的调用者也必须检查处理抛出的异常。如果抛出的而是EITOr或RuntimeException,则该方法的调用者可选择是否处理该异常。示例:自行抛出免检异常pub1icc1assExceptionDemo9pub1icstaticvoidarrException()thrownewNu11PointerException(自行抛出的免检异常一空指针异常”);pub1icstaticvoidmain(Stringargs)try(arrException();catch(Nu11PointerExceptione)e.PrintStackTrace();)自行抛出检查异常pub1icc1assExceptionDemo1Opub1icstaticvoidarrExcetion()throwsIOExceptionthrownew工OEXCePtion(自行抛出的免检异常-工。异常”);pub1icstaticvoidmain(Stringargs)try(arrExce