Java程序设计案例教程 教学课件 ppt 作者 钱银中 第8章 异常处理

上传人:E**** 文档编号:89156192 上传时间:2019-05-19 格式:PPT 页数:23 大小:91.01KB
返回 下载 相关 举报
Java程序设计案例教程 教学课件 ppt 作者 钱银中 第8章 异常处理_第1页
第1页 / 共23页
Java程序设计案例教程 教学课件 ppt 作者 钱银中 第8章 异常处理_第2页
第2页 / 共23页
Java程序设计案例教程 教学课件 ppt 作者 钱银中 第8章 异常处理_第3页
第3页 / 共23页
Java程序设计案例教程 教学课件 ppt 作者 钱银中 第8章 异常处理_第4页
第4页 / 共23页
Java程序设计案例教程 教学课件 ppt 作者 钱银中 第8章 异常处理_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《Java程序设计案例教程 教学课件 ppt 作者 钱银中 第8章 异常处理》由会员分享,可在线阅读,更多相关《Java程序设计案例教程 教学课件 ppt 作者 钱银中 第8章 异常处理(23页珍藏版)》请在金锄头文库上搜索。

1、1,第8章 异常处理,2,1 异常的类别,异常是程序运行过程中出现的错误事件 Java异常类有三种: 第1种: Error的子类 第2种: RuntimeExcepion 的子类 第3种:继承自Exception的除RuntimeExcepion外的其它子类的异常类 第1种和第2种可以通过编译,称为免检异常 ,第三种异常在编译时将被检查到, 称为检查异常 第三种异常的代码必须处理异常,3,1 异常的类别,类库中异常类的层次结构图,4,2 异常处理,异常抛出后,如果程序不捕获异常,它就被虚拟机捕获,按照默认的处理方法终止执行程序,并显示堆栈跟踪和异常信息 例:定义一个数组,然后对越界的下标元素赋

2、值,5,2 异常处理,public class Example8_1 public static void main(String args) int a = new int3; System.out.println(“即将对一个数组元素赋值!“); a3 = 25; System.out.println(“对一个数组元素赋值完毕!“); 程序运行结果: 即将对一个数组元素赋值! Exception in thread “main“ java.lang.ArrayIndexOutOfBoundsException: 3 at Example8_1.main(Example8_1.java:6)

3、,6,2 异常处理,我们希望由程序代码而不是由虚拟机捕获异常,并在异常捕获后执行一些操作 使用try/catch处理异常的格式为: try /产生异常的语句 catch(异常类 变量) /异常处理代码 ,7,2 异常处理,try/catch语句有下列三种可能出现的情况: 如果try中没有出现异常,try语句块将执行结束,然后跳过catch语句,执行try/catch后面的语句。 如果try中产生了异常并被catch捕获,将跳过try中的其余语句,把异常对象赋给catch中的变量,然后执行catch中的语句,最后执行try/catch后面的语句。 如果try中产生了异常但没有被catch捕获,将

4、终止程序执行,由虚拟机捕获并处理异常。,8,2 异常处理,例:使用try/catch语句捕获并处理数组越界异常 public class Example8_2 public static void main(String args) int a = new int3; System.out.println(“即将对一个数组元素赋值!“); try a3 = 25; System.out.println(“能执行这行代码吗!“); catch(ArrayIndexOutOfBoundsException e) System.out.println(“产生了数组越界异常!“); System.ou

5、t.println(“对一个数组元素赋值完毕!“); ,9,3 使用多个catch语句,多catch语句的执行顺序是:当try中抛出异常后,按顺序检查catch中的异常类,当异常类与抛出的异常对象匹配时,就把异常对象赋给catch中的变量,并执行这个catch语句块 每次抛出异常后只有一个catch语句能执行 如果try中没有抛出异常,将执行完try语句块,并跳过所有的catch语句 超类的catch能捕获子类异常,超类catch语句必须放在子类catch语句的后面,10,3 使用多个catch语句,public class Example8_3 public static void main

6、(String args) int a = new int3; try / a3 = 10; a3 = 2/0; catch(ArithmeticException e) System.out.println(“产生了算术运算异常!“); catch(ArrayIndexOutOfBoundsException e) System.out.println(“产生了数组越界异常!“); catch(Throwable e) System.out.println(“产生了数组越界异常!“); ,11,4 finally语句,有时候,无论是否产生异常都需要执行某些代码。例如,抛出异常前如果打开了文件

7、,无论是否抛出异常,都应该关闭文件。 finally有下列三种可能出现的情况: 如果try中没有出现异常,try语句块将执行结束,然后跳过catch语句,执行finally中的语句。 如果try中产生了异常并被catch捕获,将跳过try中的其余语句,执行catch中的语句,然后执行finally中的语句。 如果try中产生了异常,但没有被任何catch捕获,将跳过try中的其余语句,执行finally中的语句。,12,4 finally语句,public class Example8_4 public static void main(String args) try int i = 12/

8、0; System.out.println(“i = “+i); catch(ArithmeticException e) System.out.println(“产生了算术运算异常!“); finally System.out.println(“离开异常处理代码!“); ,13,5 手动抛出异常,throw语句的格式为: throw 异常对象 ; /异常对象必须是继承自Throwable的异常类的对象 例: public class Example8_5 public static void main(String args) int a = 1,2,3; int i = 3; if(i=a

9、.length) throw new ArrayIndexOutOfBoundsException(“数组下标越界!“); System.out.println(ai); ,14,5 手动抛出异常,处理手动抛出的异常 public class Example8_6 public static void main(String args) int a = 1,2,3; int i = 3; try if(i=a.length) throw new ArrayIndexOutOfBoundsException(“数组下标越界!“); System.out.println(ai); catch(Ar

10、rayIndexOutOfBoundsException e) System.out.println(“数组下标越界,不存在这样的元素!“); ,15,6 抛出异常的方法,有异常抛出的方法定义格式如下: 返回值类型 方法名(形式参数列表) throws 异常类 / 方法体 如果方法中抛出的是8.1节中介绍的免检异常,即Error或RuntimeException子类的异常,这种异常编译时不检查,不需要在throws后面指定。 如果方法中抛出检查异常,则必须在throws后面声明,16,6 抛出异常的方法,class Circle double radius; Circle(double rad

11、ius) throws IllegalArgumentException if (radius=0) throw new IllegalArgumentException(“圆的半径不能为小于0!“); this.radius = radius; void setRadius(double radius) throws IllegalArgumentException if (radius=0) throw new IllegalArgumentException(“圆的半径不能小于0,出现异常!“); this.radius = radius; double getArea( ) retur

12、n Math.PI*radius*radius; ,17,6 抛出异常的方法,public class Example8_7 public static void main(String args) Circle c = new Circle(3.4); System.out.println(“半径为3.4的圆面积为: “+c.getArea(); c.setRadius(-2); System.out.println(“半径为-2的圆面积为: “+c.getArea(); 调用方法时如何处理异常?,18,7 常用的预定义异常类,所有的异常都由Throwable派生而来,因此Throwable

13、定义的方法被这些异常类继承使用。 Throwable定义的方法中,最重要的有如下三个: String getMessage( ) /返回Java的标准错误消息 void printStackTrace( ) /显示标准的错误消息和导致异常发生的方法调用记录 String toString( ) /返回一个包含异常描述的String对象,19,7 常用的预定义异常类,public class Example8_8 public static void main(String args) int a = new int3; try a3 = 3; catch(ArrayIndexOutOfBoun

14、dsException e) System.out.println(“printStackTrace( )方法显示下列值:“); e.printStackTrace(); ,20,8 自定义异常类,可以通过继承Exception或继承Exception的子类创建自定义的异常类 例:定义一个表示圆的类CircleA,构造方法和setRadius()方法中当半径小于0时抛出自定义异常对象,抛出异常时把半径的值传给异常对象,使用try/catch捕获异常后,在catch中输出半径的值。,21,8 自定义异常类,class RadiusException extends Exception doubl

15、e r; RadiusException(double r) this.r = r; double getRadius() return r; ,22,8 自定义异常类,class CircleA double radius; CircleA(double r)throws RadiusException if(r0) throw new RadiusException(r); radius = r; void setRadius(double r)throws RadiusException if(r0) throw new RadiusException(r); radius = r; double getArea() return Math.PI*radius*radius; ,23,8 自定义异常类,public class Example8_9 public static void main(String args) try CircleA c = new CircleA(2); System.out.println(“半径为2的圆面积为:“+c.getArea(); c.setRadius(-3); System.out.println(“半径为-

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号