《第7章 异常处理ppt课件.ppt》由会员分享,可在线阅读,更多相关《第7章 异常处理ppt课件.ppt(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第7章 异常处理异常处理异常处理JavaJava程序设计基础程序设计基础主要内容:主要内容:p Java Java的运行时异常的运行时异常p try,catahtry,catah和和finallyfinallyp 异常的抛出异常的抛出p 用户自定义运行时异常用户自定义运行时异常异常的产生异常的产生1异常的产生异常的产生p 打断程序正常执行的事件。打断程序正常执行的事件。p 异常类异常类(Exception)和异常子类。和异常子类。p 一个异常事件由一个异常类的对象来代表。一个异常事件由一个异常类的对象来代表。p 产生异常时,系统处理,保证程序运行的强健产生异常时,系统处理,保证程序运行的强健性
2、。性。 异常和异常处理异常和异常处理JavaJava中的异常是用来处理在运行时发生的异常情中的异常是用来处理在运行时发生的异常情况的况的, ,比如比如数组出界、被零除、输入输出错误、数组出界、被零除、输入输出错误、堆栈溢出堆栈溢出等等与异常有关的关键字有五个:与异常有关的关键字有五个:try, catch, throw, throws, finallytry, catch, throw, throws, finally与例外处理有关的类主要有与例外处理有关的类主要有ExceptionException和和Error,Error,它们都是它们都是ThrowableThrowable的子类的子类
3、6异常和异常处理异常和异常处理异常类的结构异常类的结构 ObjectObjectErrorErrorExceptionExceptionThrowableThrowableRuntimeExceptionRuntimeException检查异常检查异常7异常和异常处理异常和异常处理wThrowableThrowable以下的异常都可以被捕获以下的异常都可以被捕获w所有所有ErrorError类的错误都不需要处理类的错误都不需要处理wRuntimeExceptionRuntimeException子类下的异常为运行时异常子类下的异常为运行时异常, ,或称非检查异常或称非检查异常wRuntimeE
4、xceptionRuntimeException子类以外的异常都是检查异常子类以外的异常都是检查异常w检查异常在代码中必须被被捕获检查异常在代码中必须被被捕获, ,或者被声明或者被声明8异常和异常处理异常和异常处理ErrorError类处理的都是一些与硬件设备相关的严重类处理的都是一些与硬件设备相关的严重错误错误, ,比如内存溢出比如内存溢出, ,虚拟机错误等虚拟机错误等, ,这样的错误这样的错误一般程序不作处理一般程序不作处理ExceptionException类处理的是诸如算术错误类处理的是诸如算术错误, ,数据格式错数据格式错误误, ,非法参数非法参数, ,非法存取等非法存取等, ,与程
5、序有关的错误与程序有关的错误, ,是是我们重点处理的对象我们重点处理的对象处理异常使用处理异常使用trytry- -catchcatch- -finallyfinally结构结构9异常和异常处理异常和异常处理ExceptionExceptionClassNotFoundExceptionClassNotFoundExceptionAWTExceptionAWTExceptionIOExceptionIOExceptionNoSuchMethodExceptionNoSuchMethodException常见检查常见检查异常异常10异常和异常处理异常和异常处理IndexOutOfBoundsEx
6、ceptionIndexOutOfBoundsExceptionNullPointerExceptionNullPointerExceptionNoSuchElementExceptionNoSuchElementExceptionillegalArgumentExceptionillegalArgumentExceptionArithmeticExceptionArithmeticExceptionRuntimeExceptionRuntimeExceptionArrayIndexOutOfBoundsExceptionArrayIndexOutOfBoundsExceptionString
7、IndexOutOfBoundsExceptionStringIndexOutOfBoundsExceptionNumberFormatExceptionNumberFormatException常见运行常见运行时异常时异常11异常和异常处理异常和异常处理ArithmeticException异常算术异常。例如,一个整数“除以零”时,抛出此类的一个实例。 ClassCastException异常类转换异常。当试图将父类对象强制转换为其子类对象时,可能会抛出该异常。例如NumberFormatException异常数字格式异常。例5.1的演示。 ArrayIndexOutOfBoundsExce
8、ption异常数组索引超出边界异常。使用数组的length属性获取数组的大小。例如StringIndexOutOfBoundsException异常字符串索引超出边界异常。使用字符串的length()方法得到字符串的长度。例如 NullPointerException异常空指针异常。对象已声明,但没有被实例化就试图使用该对象。例如12异常和异常处理异常和异常处理使用使用try-catch-finallytry-catch-finally结构结构 trytry /可能产生异常的代码可能产生异常的代码 catch(someException e)catch(someException e) /处理
9、异常的代码处理异常的代码 finally finally /必须执行的代码必须执行的代码/关闭文件、连接等。 13异常和异常处理异常和异常处理执行过程:没有异常: try块-finally块。产生异常: try块终止-匹配的catch块-finally块。一个catch语句处理多个异常类型:参数是多个异常类型的父类。14异常和异常处理异常和异常处理try-catchtry-catch结构是合法的结构是合法的 trytry /可能产生异常的代码可能产生异常的代码 catch(someException e)catch(someException e) /处理异常的代码处理异常的代码 15异常和异
10、常处理异常和异常处理try-finallytry-finally结构也是合法的结构也是合法的 trytry /可能产生异常的代码可能产生异常的代码 finallyfinally /必须执行的代码必须执行的代码 16异常和异常处理异常和异常处理只有只有trytry的结构是非法的的结构是非法的 trytry /可能产生异常的代码可能产生异常的代码 catchcatch和和finallyfinally必须至少有一个跟在必须至少有一个跟在try try 后面后面17异常和异常处理异常和异常处理在在try-catchtry-catch结构中结构中 trytry /可能产生异常的代码可能产生异常的代码 c
11、atch(someException e)catch(someException e) /处理异常的代码处理异常的代码 如果不发生异常如果不发生异常, ,则则catchcatch块中的代码不会被执行块中的代码不会被执行18异常和异常处理异常和异常处理在在try-finallytry-finally结构中结构中 trytry /可能产生异常的代码可能产生异常的代码 finallyfinally /必须执行的代码必须执行的代码 不论是否发生异常不论是否发生异常finallyfinally块中的代码一定会被执行块中的代码一定会被执行19异常和异常处理异常和异常处理下面的代码是通不过编译的下面的代码是
12、通不过编译的 public void myFunc()public void myFunc() doSomething(); doSomething(); void doSomething() void doSomething() throw new IOException(); throw new IOException(); 要用要用try-catchtry-catch去捕获异常去捕获异常20异常和异常处理异常和异常处理( (例例) )public class ExceptionDemo public class ExceptionDemo public static void main(
13、String s) public static void main(String s) try try int d = 0; int d = 0; d = 100/d; d = 100/d; catch(Exception e) catch(Exception e) System.out.println(“ System.out.println(“被零除了被零除了”);); 21异常和异常处理异常和异常处理( (例例) )在我们写在我们写JavaJava程序的时程序的时, ,有些情况下我们事先不太清楚是否会有异常发生有些情况下我们事先不太清楚是否会有异常发生, ,或者我们疏或者我们疏忽了忽了,
14、 ,那么在编译的时候我们往往就会看到象下面那样的提示信息那么在编译的时候我们往往就会看到象下面那样的提示信息E:workjavac ExceptionDemo.javaExceptionDemo.java:7: unreported exception java.io.IOException; must be caught or declared to be thrown System.in.read(); 1 error22异常和异常处理异常和异常处理( (例例) )这时我们就应该明白要在出错的语句这时我们就应该明白要在出错的语句System.in.read();System.in.read
15、();的前后加的前后加try-catchtry-catch去捕捉这个异常去捕捉这个异常 trytry System.in.read(); System.in.read(); catch(Exception e) catch(Exception e) 象这样象这样自定义异常自定义异常用户为什么要自定义异常?用户为什么要自定义异常?JavaJava类库中定义的异常主要用来处理编程中类库中定义的异常主要用来处理编程中一些常见的运行错误,这些错误是系统可以预一些常见的运行错误,这些错误是系统可以预见和自动识别的。见和自动识别的。若用户程序有其特殊的逻辑要求,需要通过若用户程序有其特殊的逻辑要求,需要通
16、过JavaJava的异常处理机制来处理用户自定义的异常。的异常处理机制来处理用户自定义的异常。自定义异常自定义异常如何自定义异常?如何自定义异常?1.1. 创建一个类,必须继承创建一个类,必须继承ExceptionException类类2.2. 在可能抛出自定义异常方法的方法头中声在可能抛出自定义异常方法的方法头中声明该异常明该异常3.3. 在方法体中指明需要抛出自定义异常对象在方法体中指明需要抛出自定义异常对象的位置的位置 创建异常对象创建异常对象 使用使用throwthrow子句抛出异常子句抛出异常自定义异常(例)自定义异常(例)例:编写一个程序,在命令行输入一个学生的成绩,例:编写一个程
17、序,在命令行输入一个学生的成绩,输出相应的等级。其中,成绩大于输出相应的等级。其中,成绩大于9090分输出分输出”A”A”,80-9080-90输出输出“B”B”,70-8070-80输出输出“C”C”,60-7060-70输出输出“D”D”,6060以下输出以下输出“E”E”,要求输入分数的值在,要求输入分数的值在0-0-100100之间。自定义异常类之间。自定义异常类NumberRangeExceptionNumberRangeException,当,当输入数据不在输入数据不在0-1000-100之间时,输出等级的方法之间时,输出等级的方法void void show(int score)
18、show(int score)将抛出自定义异常。将抛出自定义异常。自定义异常(例)自定义异常(例)自定义异常类自定义异常类NumberRangeExceptionNumberRangeException的定义:的定义:class NumberRangeException extends Exceptionclass NumberRangeException extends ExceptionNumberRangeException(String msg)NumberRangeException(String msg)super(msg);super(msg); 继承类继承类ExceptionE
19、xception自定义异常(例)自定义异常(例)在可能抛出自定义异常方法的方法头中声明该在可能抛出自定义异常方法的方法头中声明该异常异常public static void show(int score) public static void show(int score) throws NumberRangeExceptionthrows NumberRangeException if(score100) if(score100) NumberRangeException e= NumberRangeException e= new NumberRangeException( new Num
20、berRangeException(输入输入的数字不在指定的范围!请重新输入。的数字不在指定的范围!请重新输入。);); throw e;throw e; 接下页接下页 else elseint s=score/10;int s=score/10;switch(s)switch(s)case 10:case 10:case 9:System.out.println(A);break;case 9:System.out.println(A);break;case 8:System.out.println(B);break;case 8:System.out.println(B);break;ca
21、se 7:System.out.println(C);break;case 7:System.out.println(C);break;case 6:System.out.println(D);break;case 6:System.out.println(D);break;default:System.out.println(E);default:System.out.println(E); 自定义异常(例)自定义异常(例)接上页接上页public static void main(String args) public static void main(String args) int score = Integer.parseInt(args0); int score = Integer.parseInt(args0); try try show(score); show(score); catch(NumberRangeException e) catch(NumberRangeException e) System.out.println(e.getMessage(); System.out.println(e.getMessage(); 自定义异常(例)自定义异常(例) show() show()方法的调用方法的调用