《第9章[2]ppt课件.ppt》由会员分享,可在线阅读,更多相关《第9章[2]ppt课件.ppt(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第9章2第第 9 章章9.1 Java异常处理机制异常处理机制9.2 异常处理方式异常处理方式9.1 异常处理机制异常处理机制 Java提供了功能强大的异常处理机制,可以方便地提供了功能强大的异常处理机制,可以方便地在程序中监视可能发生异常的程序块,并将所有异常在程序中监视可能发生异常的程序块,并将所有异常处理代码集中放置在程序某处,使完成正常功能的程处理代码集中放置在程序某处,使完成正常功能的程序代码与进行异常处理的程序代码分开。序代码与进行异常处理的程序代码分开。在在Java的异常处理机制中,引进了很多用来描述和处理的异常处理机制中,引进了很多用来描述和处理异常的类,称为异常类。每个异常类
2、反映一类运行错异常的类,称为异常类。每个异常类反映一类运行错误,类定义中包含了该类异常的信息和对异常进行处误,类定义中包含了该类异常的信息和对异常进行处理的方法。每当程序运行过程中发生了某个异常现象,理的方法。每当程序运行过程中发生了某个异常现象,系统将产生一个相应的异常类对象,并交由系统中的系统将产生一个相应的异常类对象,并交由系统中的相应机制进行处理,以避免死机、死循环或其他对系相应机制进行处理,以避免死机、死循环或其他对系统有害的结果发生,保证了程序运行的安全性。统有害的结果发生,保证了程序运行的安全性。 在在Java中,将异常情况分为中,将异常情况分为Exception和和Error两
3、大类。两大类。Exception类解决由程序本类解决由程序本身及环境所产生的异常,而身及环境所产生的异常,而Error类则处类则处理较少发生的内部系统错误。理较少发生的内部系统错误。Exception类异常可以被捕获并进行相应处理,而类异常可以被捕获并进行相应处理,而对于对于Error类异常,程序员通常无能为力,类异常,程序员通常无能为力,只能在其发生时由用户按照系统提示关只能在其发生时由用户按照系统提示关闭程序。闭程序。ObjectThrowableExceptionError 异常类的继承结构 Exception子类的继承关系ExceptionClassNotFoundExceptionC
4、lassNotSupportedExceptionIllegalAccessExceptionInstantiationExceptionInterruptedExceptionNoSuchMethodExceptionRuntimeExceptionArithmeticExceptionArrayStoreExceptionClassCastExceptionIllegalArgumentExceptionIllegalThreadStateExceptionNumberFormatExceptionException子类(续)IllegalMonitorStateExceptionInde
5、xOutOfBoundsExceptionArrayIndexOutOfBoundsExceptionStringIndexOutOfBoundsExceptionNegativeArraySizeExceptionNullPointerExceptionSecurityException 9.2 异常处理方式异常处理方式 异常处理的方式有两种:使用trycatchfinally结构对异常进行捕获和处理;1.通过throws和throw抛出异常。 9.2.1 trycatchfinally结构结构在在Java中,可以通过中,可以通过trycatchfinally结构对异常进行捕获和处理,其形式
6、结构对异常进行捕获和处理,其形式如下:如下:try 可能出现异常的程序代码可能出现异常的程序代码catch (异常类名异常类名1 异常对象名异常对象名1) 异常类名异常类名1对应的异常处理代码对应的异常处理代码 catch (异常类名异常类名2 异常对象名异常对象名2) 异常类名异常类名2对应的异常处理代码对应的异常处理代码 finally 必须执行的代码必须执行的代码 说明u将可能发生异常的程序代码放置在将可能发生异常的程序代码放置在try程序块中。程序运程序块中。程序运行过程中,如果该块内的代码没有出现任何异常,后面行过程中,如果该块内的代码没有出现任何异常,后面的各的各catch块不起任
7、何作用。但如果该块内的代码出现了块不起任何作用。但如果该块内的代码出现了异常,系统将终止异常,系统将终止try块代码的执行,自动跳转到所发生块代码的执行,自动跳转到所发生的异常类对应的的异常类对应的catch块中,执行该块中的代码。块中,执行该块中的代码。 u其中的其中的finally块是个可选项,如果含有块是个可选项,如果含有finally块,无论块,无论异常是否发生,异常是否发生,finally块的代码必定执行。块的代码必定执行。 u一个一个try块可以对应多个块可以对应多个catch块,用于对多个异常类进块,用于对多个异常类进行捕获。行捕获。 例例 捕获数组下标越界异常捕获数组下标越界异
8、常public class Exception1 public static void main(String args) try int a=1,2,3,4,5, sum=0; for (int i=0; i=5; i+) sum=sum+ai; System.out.println(sum=+sum); System.out.println(Successfully! ); catch (ArrayIndexOutOfBoundsException e) System.out.println(ArrayIndexOutOfBoundsException detected); finally
9、 System.out.println( Programm Finished! ); 例例 捕获算术异常捕获算术异常public class Exception2public static void main(String args) try int x, y; x=15; y=0; System.out.println(x/y); System.out.println(Computing successfully!); catch (ArithmeticException e) System.out.println( ArithmeticException catched ! ); Syst
10、em.out.println(Exception message:+e.toString(); finally System.out.println(Finally block.); 9.2.2 抛出异常抛出异常通常情况下,异常是由系统自动捕获的通常情况下,异常是由系统自动捕获的。但程序但程序员也可以自己通过员也可以自己通过throw语句抛出异常。语句抛出异常。throw语语句的格式为:句的格式为: throw new 异常类名(信息)异常类名(信息) 其中异常类名为其中异常类名为系统异常类名或或用户自定义的异的异常类名,常类名,“信息信息”是可选信息。如果提供了该信是可选信息。如果提供了该信
11、息,息,toString()方法的返回值中将增加该信息内容。方法的返回值中将增加该信息内容。 l抛出异常语句抛出异常语句例例 抛出多种异常public class Exception3 public static int Sum(int n) if (n 0) throw new IllegalArgumentException(n应该为正整数!应该为正整数!); int s = 0; for (int i=0; i=n; i+) s = s + i; return s; public static void main(String args) try int n = Integer.pars
12、eInt(args0); System.out.println(Sum(n); catch (ArrayIndexOutOfBoundsException e) System.out.println(命令行为:命令行为:+java Exception3 ); catch (NumberFormatException e2) System.out.println(参数参数应为整数应为整数!); catch (IllegalArgumentException e3) System.out.println(错误参数错误参数:+e3.toString(); finally System.out.pri
13、ntln(程序结束程序结束!); 在有些情况下,一个方法并不需要处理它所生成的异常,在有些情况下,一个方法并不需要处理它所生成的异常,而是向上传递,由调用该方法的其他方法来捕获该异常,而是向上传递,由调用该方法的其他方法来捕获该异常,这时就要用到这时就要用到throws子句。其格式如下:子句。其格式如下: 修饰符修饰符 类型标识符类型标识符 方法名(方法名(参数表参数表) throws 异常类型名异常类型名 声明部分声明部分 语句部分语句部分 l抛出异常选项抛出异常选项例 抛出异常的方法public class Exception4 public static int Sum() throws
14、 NegativeArraySizeException int s = 0; int x = new int-4; for (int i=0; i1.0E8|aim0) throw new OverFlowException(); else return x*x; public static void main(String args) int y; try y=multi(); System.out.println(y=+y); catch(OverFlowException e) System.out.println(e); 该程序的运行结果如下:此处数据有溢出,溢出类是OverFlowE
15、xceptionOverFlowException例 处理多种异常import javax.swing.JOptionPane;class MathException extends Exception mathException() System.out.println(输入数据不正确); class Exception6 public static String name; public static int pay; public static void inputdata() throws MathException try name=JOptionPane.showInputDial
16、og(请输入您的姓名); if(name.equals() throw new Exception(); /假如没有输入名字就抛出Exception类异常 pay=Integer.parseInt(JOptionPane.showInputDialog(请输入您的月工资); if(pay0) throw new MathException(); /假如输入的月工资数小于零,就会抛出自定义MathException类异常 catch(Exception e)/捕获Exception类异常 System.out.println(e); System.exit(0); public static void main(String args) try for(int i=1; ;i+)/没有给出循环次数限制 inputdata(); System.out.println(name+的年薪是+pay*12); catch(MathException pt)/捕获自定义MathException类异常 System.out.println(pt); System.exit(0);