《Java中异常处理.docx》由会员分享,可在线阅读,更多相关《Java中异常处理.docx(16页珍藏版)》请在第一文库网上搜索。
1、第13章异常课堂练习(2理论+2习题课+2上机)【教学目标】 了解异常和异常处理的概貌(第13.2节)。 探究使用异常处理的优点(第13.3节)。 区别异常的类型:致命的)和Exception (非致命的),以及必检和免检异常(第13.4节)。 在方法头中声明异常(第节)。 在方法中抛出异常(第节)。 编写trycatch块处理异常(第节)。 解释异常是如何传播的(第节)。 在try-catch块中使用finally子句(第13.6节)。 只为非预期错误使用异常(第13.7节)。 在catch块中重新抛出异常(第13.8节)。 创建链式异常(第13.9节)。 定义自定制的异常类(第13.10节
2、)。【教学重点】 了解异常的处理机制 异常的解决方法 Exception类的作用及其使用方法 必检异常、免检异常的特点【基本知识点】1、常见异常演示(1)算数异常:在算术运算中,0作为除数时,系统将产生该异常,示例:public static void main(String args) int x=10;int y=0;int m=x/y;)Exception in thread ,lmain,1 : / by zeroat exception . NotChe eke t Except ion. main (NotChecketExccptLion java: 7)在数组下标越界时,将产生
3、该异常,示例:public static void main(String args) int arr=1,2 3;System.out.printin(arr3);)Exception in thread ,main : 3at exception .NotChecketException.main(NotChecketExceptionjava:6)(3)数组存储异常:java.lang.ArrayStoreException在数组中存入与之声明类型不符的类型,将产生该异常,示例:public static void main(String args) boolean b = false,
4、true,false;int attr = 1,2,3;System. arraycopy (attrz 0, b, 0, 1);)Exception in thread ,lmainat java. lang. System.arraycopy(Native Method)at exceptionNotChecketExceptionmain(NotCheckctExccptionjava:7)将对象A转换成为对象B时,如果A既不是与B同一个类,也不是B的子类,将产生该异常,示例:public static void main(String args) Object obj = new Ob
5、ject ();int ir = (int ) obj ;)Exception in thread ,lmain : java. lang.Object cannot be cast to Iat exception .NotChecketException.main(NotChecketExceptionjava:6)引用空对象的实例或方法时,将产生该异常。示例:public static void main(String args) String str = null;System.out.rintln(str. length ();)Exception in thread ,lmain2
6、、trycatch语句捕获异常public class ExceptionDemol public static void main(String args) int i = 1, 2, 3 ;try System. out.printin (,i 0 = + i 0);System.out.printin(i3= i3); catch (ArraylndexOutOfBoundsException e) System. out.printin (出现异常” + e . getMessage ();)System.out.printin (i1= + i 1);)i0=l出现异常3il=2以上
7、面的程序运行结果可以发现,在程序中加入异常处理代码后,当异常发生时,整个程序没有因为异常的出现而中断执行。3 try.catchfinally语句捕获异常public class ExceptionDemo4 public static void main(String args) int i = 1, 2, 3 ;try (System. outprintln (lli 0 = + i 0);System. out.printin (lli 3 = + i 3); catch (ArraylndexOutOfBoundsException e) System. out.printin (,l
8、 出现异常” + e . getMessage ();finallySystem. out.printin (无论是否有异常,都会执行finally语句n);)System. out.printin (,i 1 = + i 1 );)iO=l出现异常3无论是否有异常,都会执行finally语句il=2其中,不论try代码块中发生了哪种异常,也不论try代码块和catch代码块是否可以正常执行,finally代码块都保证会执行。即使前面的try.catch代码块都无法捕获这个异常,或者在catch代码块中还有其他异常产生,在将新的异常传递给java运行时环境之前都会先执行finally代码块。4
9、、多个catch代码块public class ExceptionDemo5 public static void main(String args) FileReader fr = null;try fr=new FileReader(testtxt);fr. read (); catch (FileNotFoundException e) / TODO Auto-generated catch blocke. printStackTrace (); catch (IOException e) / TODO Auto-generated catch blocke. printStackTra
10、ce ();finallytry frclose (); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace ();)使用多个catch语句块的时候,请注意catch代码块的排顺序问题。Catch代码块捕获异常是按照顺序的,如果前面已经有一个异常类型被捕获了,但乂同时满足后面的异常类型时,就不会被捕获了。5、在调用方法出处理被抛出的异常public class Exception public static void arrException () throws IOExceptionFileRead
11、er f r = new FilReadr (不存在的文档 txt ”);fr. close ();)public static void main(String args) try arrException (); catch (IOException e) / TODO Auto-generated catch blocke. printstackTrace ();)在上面的程序中,“不存在的文档”表示在同一个目录下没有该文档。当arrException ()方法产生了异常,此方法并不作处理,而是交由调用arrException ()方法的main方法处理。6、错误的使用throws678
12、910ne12qB14加5 1617181920public class ExceptionDemo7 public static void arrExcetion() throws Excetion(FileReader fr new FileReQdur(不存在的文档,txt:”);fr.close()j)public static void main(String args) try 0ZC3g困四Q; catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace()j)在上面的程序中,arrExcept
13、ion ()方法抛出的异常类型为Exceptiono比调用arrException ()方法的main方法能处理的异常范围大,所以编译错误。7、主方法main使用throws关键字public class ExceptionDemo8 public static void arrException () throws ExcetionFileReader f r = new FilReadr (不存在的文档. txt);fr. close ();)public static void main(String args) throws Exception arrException();)Exce
14、ption in thread main” :不存在的文档. txt (No such file or directory)at java . ioFileInputstream.open(Native Method)at java. io . Fileinputstream.(File1nputStrcamjava :14 6)at javaioFileInputstream.(File工nputStream.java :101)at java . io .FileReader.(FileReaderjeva:58)at exceptionExceptionDemo8arrException(ExceptionDemo8java:8)at exception . ExceptionDemo8main(ExceptionDemo8j ava:12)8、若需要在程序中自行抛出异常,可以使用throw关键字。Throw语句可以单独使用,用于方法体内部,throw抛出的是异