收藏 分享(赏)

第9章 异常处理new.ppt

上传人:hwpkd79526 文档编号:7249174 上传时间:2019-05-10 格式:PPT 页数:47 大小:347.50KB
下载 相关 举报
第9章 异常处理new.ppt_第1页
第1页 / 共47页
第9章 异常处理new.ppt_第2页
第2页 / 共47页
第9章 异常处理new.ppt_第3页
第3页 / 共47页
第9章 异常处理new.ppt_第4页
第4页 / 共47页
第9章 异常处理new.ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

1、第九章,异常处理,重点: 在编写程序时,要正确地使用捕获异常和声明抛弃异常的两种异常处理的方法。 难点: 如何使用Java中两种异常处理机制,抛弃异常和声明抛弃异常的区别与联系。,难重点,【教学目标】 本讲主要讲述了java语言中独特的异常处理机制,通过本讲的学习,同学们可以编写更为完善的java程序。 【难 重 点】 重点: 在编写程序时,要正确地使用捕获异常和声明抛弃异常的两种异常处理的方法。 难点: 如何使用Java中两种异常处理机制,抛弃异常和声明抛弃异常的区别与联系。,【本讲知识点】 1 什么是异常 11 异常示例 12 异常处理机制 13 异常类的层次 2 异常的处理 21 捕获异

2、常 22 声明抛弃异常 3 自定义异常类的使用,9.1 异常处理机制,Java使用异常对程序给出一个统一和相对简单的抛出和处理错误的机制。如果一个方法本身能抛出异常,调用者可以捕获异常使之得到处理;也可以回避异常,这时异常将在调用的堆栈中向下传递,直到被处理。,class ExceptionDemo2 public static void main( String args ) int a = 0; System.out.println( 5/a ); ,异常,Java把程序运算中可能遇到的错误分为两类: 一类是非致命性的,通过某种修正后程序还能继续执行。这类错误称作异常。 另一类是致命性的,

3、即程序遇到了非常严重的不正常状态,不能简单地恢复执行,这就是错误。,Java提供了异常处理机制,在Exception类中定义了程序产生异常的条件。 对待异常通常并不是简单地结束程序,而是转去执行某段特殊代码处理这个异常,设法恢复程序继续执行。,Java实现了C+风格的异常。 当程序中发生异常时,称程序产生了一个异常事件,相应地生成异常对象。 生成的异常对象传递给Java运行时系统。,异常产生和提交的这一过程称为抛出。 异常发生时,Java运行时系统从生成对象的代码块开始,沿方法的调用栈逐层回溯,寻找相应的处理代码,并把异常对象交给该方法处理,这一过程称为捕获。,所有的包中都定义了异常类和错误类

4、。 Exception类是所有异常的父类, Exception 类对象由应用程序处理或抛出。 Error类是所有错误的父类,表示很难恢复的错误,如内存越界,一般不期望用户程序来处理,即使程序员有能力处理这种错误,也还是交给系统处理为好。 Error 类对象由 Java 虚拟机生成并抛出。 这两个类同时又是Throwable的子类。,异常和错误类的层次结构如图所示:,Exception子类的继承关系,Exception ClassNotFoundException ClassNotSupportedException IllegalAccessException InstantiationExc

5、eption InterruptedException NoSuchMethodException RuntimeException ArithmeticException:算术运算产生的异常 ArrayStoreException:存入数组的内容数据类型不一致所产生 ClassCastException:类对象强迫转换造成不当类对象所产生 IllegalArgumentException:程序调用时返回错误自变量的数据类型 IllegalThreadStateException NumberFormatException,Exception子类(续),IllegalMonitorStateE

6、xception IndexOutOfBoundsException:索引超出范围所产生 ArrayIndexOutOfBoundsException StringIndexOutOfBoundsException NegativeArraySizeException:负值索引所产生 NullPointerException:对象引用参考值为null所产生 SecurityException :违反安全所产生的异常,公共异常,Java预定义了一些常见异常,最常用到的有如下几个。 (1)ArithmeticException整数除法中,如果除数为0,则发生该类异常,如:int i = 12 /

7、0;,(2) NullPointerException 如果一个对象还没有实例化,那么访问该对象或调用它的方法将导致NullPointerException异常 如:image im = new image 4;System.out.println(im0.toString(),(3) NegativeArraySizeException 数组的元素个数应是一个大于等于0的整数。创建数组时,如果元素个数是个负数,则会引发NegativeArraySizeException异常。,(4) ArrayIndexOutOfBoundsExceptionJava把数组看作是对象,并用length变量记

8、录数组的大小。访问数组元素时,运行时环境根据length值检查下标的大小。如果数组下标越界,则将导致ArrayIndexOutOfBoundsException异常。,(5) SecurityException该类异常一般在浏览器内抛出。 若Applet试图进行下述操作,则由SecurityManager类抛出此异常: 访问本地文件。 打开一个套接口,而不是返回到提供Applet的主机。 在运行时环境中运行另一个程序。,除此之外,常见异常还有:ArrayStoreException: 程序试图存取数组中错误的数据类型。FileNotFoundException: 试图存取一个并不存在的文件。I

9、OException: 通常的I/O错误。,异常分类,在Java中主要有三类异常。 Java定义了类java.lang.Throwable,它是使用异常处理机制可被抛出并捕获的所有异常对象的父类。 它有三个基本子类,异常分类,Exception 类的主要方法,public Exception( ); public Exception(String s); public String toString( ); public String getMessage( );,异常示例,public class HelloWorld public static void main (String args

10、 ) int i = 0;String greetings = “Hello world!“,“No, I mean it!“, “HELLO WORLD!“;while (i 4) System.out.println (greetingsi);i+;,程序输出如下所示:java HelloWorldHello World!No, I mean it!HELLO WORLD! java.lang.ArrayIndexOutOfBoundsExcepiton: 3 at HelloWorlds.main(HelloWorld.java:12),9.1 Java异常处理机制 9.2 异常处理方式

11、,9.2 异常处理方法,异常处理的方法有两种: 使用trycatchfinally结构对异常进行捕获和处理; 通过throws和throw抛出异常。,1 trycatchfinally结构,在Java中,可以通过trycatchfinally结构对异常进行捕获和处理,其形式如下: try 可能出现异常的程序代码 catch (异常类名1 异常对象名1) 异常类名1对应的异常处理代码 catch (异常类名2 异常对象名2) 异常类名2对应的异常处理代码 finally 必须执行的代码 ,说明,将可能发生异常的程序代码放置在try程序块中。程序运行过程中,如果该块内的代码没有出现任何异常,后面的

12、各catch块不起任何作用。但如果该块内的代码出现了异常,系统将终止try块代码的执行,自动跳转到所发生的异常类对应的catch块中,执行该块中的代码。 其中的finally块是个可选项,如果含有finally块,无论异常是否发生,finally块的代码必定执行。 一个try块可以对应多个catch块,用于对多个异常类进行捕获。,Java实例捕获数组下标越界异常,public class Exception1 public static void main(String args)tryint a=1,2,3,4,5, sum=0;for (int i=0; i=5; i+) sum=sum+

13、ai;System.out.println(“sum=“+sum);System.out.println(“Successfully! “);,catch (ArrayIndexOutOfBoundsException e)System.out.println(“ArrayIndexOutOfBoundsExceptiondetected“); finallySystem.out.println(“ Programm Finished! “); ,例 -捕获算术异常,public class Exception2 public static void main(String args) try

14、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 !“ );System.out.println(“Exception message:“+e.toString(); finallySystem.out.println(“Finally block.“); ,2 抛出异常,通常情况下,异常是由系统自动捕获的。但程

15、序员也可以自己通过throw语句抛出异常。throw语句的格式为:throw new 异常类名(信息) 其中异常类名为系统异常类名或用户自定义的异常类名,“信息”是可选信息。如果提供了该信息,toString()方法的返回值中将增加该信息内容。,抛出异常语句,Java实例抛出多个异常,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

16、s;,public static void main(String args) tryint n = Integer.parseInt(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

17、.println(“错误参数:“+e3.toString(); finally System.out.println(“程序结束!“); ,在有些情况下,一个方法并不需要处理它所生成的异常,而是向上传递,由调用该方法的其他方法来捕获该异常,这时就要用到throws子句。其格式如下:返回值类型名 方法名(参数表) throws 异常类型名声明部分语句部分,抛出异常选项,例-抛出异常的方法,public class Exception4public static int Sum() throws NegativeArraySizeExceptionint s = 0;int x = new int

18、-4;for (int i=0; i4; i+) xi=i;s = s + xi;return s;,public static void main(String args)trySystem.out.println(Sum();catch (NegativeArraySizeException e)System.out.println(“异常信息:“+e.toString();,3 自定义异常类,自定义异常类可以通过继承Exception类来实现。其一般形式为:class 自定义异常类名 extends Exception异常类体;,Java实例自定义异常类,class OverFlowEx

19、ception extends ExceptionOverFlowException() System.out.println(“此处数据有溢出,溢出类是OverFlowException“); public class Exception5 public static int x=100000;public static int multi() throws OverFlowException int aim;aim=x*x*x;if(aim1.0E8 | aim0) throw new OverFlowException(); elsereturn x*x; ,public static

20、void main(String args)int y;tryy= multi();System.out.println(“y=“+y);catch(OverFlowException e)System.out.println(e); ,例 -处理多种异常,import javax.swing.JOptionPane; class mathException extends Exception mathException()System.out.println(“输入数据不正确“); ,class Exception6 public static String name;public stat

21、ic int pay;public static void inputdata() throws mathExceptiontry name=JOptionPane.showInputDialog(“请输入您的姓名“);if(name.equals(“”) throw new Exception(); /假如没有输入名字就“抛出”一个 Exception异常pay=Integer.parseInt(JOptionPane.showInputDialog(“请输入您的月工资“);if(pay0) throw new mathException(); /假如输入的月工资数小于零,就会“抛出“自定义

22、异常mathExceptioncatch(Exception e) /捕获Exception异常 System.out.println(e);System.exit(0); ,public static void main(String args) tryfor(int i=1;i+) /没有给出循环次数限制 inputdata();System.out.println(name+“的年薪是“+pay*12); catch(mathException pt) /捕获自定义异常 System.out.println(pt);System.exit(0); ,本章的课到此结束,本章作业:P134 4.,谢谢大家,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报