Java语言系统 异常-补充课件

上传人:我*** 文档编号:139681472 上传时间:2020-07-23 格式:PPT 页数:35 大小:330.50KB
返回 下载 相关 举报
Java语言系统 异常-补充课件_第1页
第1页 / 共35页
Java语言系统 异常-补充课件_第2页
第2页 / 共35页
Java语言系统 异常-补充课件_第3页
第3页 / 共35页
Java语言系统 异常-补充课件_第4页
第4页 / 共35页
Java语言系统 异常-补充课件_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《Java语言系统 异常-补充课件》由会员分享,可在线阅读,更多相关《Java语言系统 异常-补充课件(35页珍藏版)》请在金锄头文库上搜索。

1、Java异常的捕获与处理,学习目标 重点、难点,Company Logo,3,一、异常机制简介,在进行程序设计时,错误的产生是不可避免的,如何处理错误?把错误交给谁去处理?程序又该如何从错误中恢复?这是任何程序设计语言都要解决的问题。 Java异常是Java提供的用于处理程序中错误的一种机制。所谓错误,是在程序运行过程中发生的异常事件,比如除0溢出、数组越界、文件找不到等,这些事件的发生将阻碍程序的正常运行。 为了加强程序的健壮性和容错性,程序设计时,应充分考虑可能发生的异常事件并作出相应的处理。,4,一、异常基本概念,异常是在程序运行过程中发生的异常事件,比如0溢出,数组越界,文件找不到等。

2、 异常处理使用 try,catch,throw,throws,finally关键字来尝试可能未成功的操作,处理失败,以及在事后清理资源。 Java通过面向对象的方法来处理异常。(各种不同的异常事件进行分类,把异常事件当成对象来处理)把生成异常对象并把它提交给运行时系统的过程称为抛出(throw)一个异常。 运行时系统从生成异常的方法开始进行回溯,直到找到包含相应异常处理的方法为止,这一个过程称为捕获(catch)一个异常。,方法运行过程中发生异常,则该方法生成一个异常对象,并把它交给运行时系统,运行时系统再处理,异常示例,public class ExcTest public static v

3、oid main(String args) int a=3; int b=0; int c=a/b; System.out.println(c); ,5,异常示例,public class ExcTest public static void main(String args) int a=3; int b=0; if(b=0) System.out.println(“除数不能为0”); else int c=a/b; System.out.println(c); ,6,使用传统的方式(ifelse) 处理异常。 不好:表示异常情况有限, 且正常代码和异常代码混在 一起,不利于维护。,Java

4、按照面向对象的思想处理异常,7,二、异常类及其子类,所有异常类型都是 内置类Throwable的子类,用于Java运行时,系统的严重错,由Java虚拟机生成并抛出,包括动态链接失败、虚拟机错误、线程死锁等,一般不做处理。,用于用户程序可能 捕获的异常,也是用来创建用户异常类型子类的类。,Error类对象是由Java虚拟机生成并抛出;通常Java程序不对该类异常进行处理 Exception类对象是由Java程序处理或抛出。有不同的子类分别对应于不同类型的异常。,运行时异常,可以不做处理,非运行时异常,必须处理,Java异常机制的优点,通过面向对象的方法把各种不同的异常事件分类,利用类的层次性可以

5、把多个具有相同父类的异常统一处理,也可以针对不同的异常分别处理,提高了错误处理的灵活性。 Java的异常处理机制将“常规”代码和处理异常的代码分开,增强了程序的可读性(想象一下C语言用if-else语句处理异常的情景)。 异常对象可以沿调用栈自动向上传播,而不是C语言中通过函数的返回值来传播,这样可以传递更多的信息并且简化代码的编写,利于查找和调试代码错误。,8,异常情况表示为异常类,发挥类的可扩展和可重用性,可以灵活处理异常,有能力处理异常就捕获处理,没有能力就抛出,由方法调用者处理,常见异常及其用途 2-1,9,10,常见异常及其用途 2-2,11,三、异常处理的种类,运行时异常 可以不做

6、处理 使用trycatchfinally语句捕获异常 可能引发异常的语句封入在 try 块内,而处理异常的相应语句则封入在 catch 块内。 通过throws子句声明异常,还可以定义自己的异常类,并用throw语句抛出它。 在方法声明中包含 throws 子句,通知潜在调用者,如果发生了异常,必须由调用者处理。,由五个关键字 try、catch、throw、throws 和 finally 处理。,12,运行时异常,RuntimeException类及其子类可以不做处理,系统会把生成的异常对象交给默认的异常处理程序,在标准输出上显示异常的内容以及发生异常的位置。 eg: public cla

7、ss ExcTest public static void main(String args) int a=3; int b=0; int c=a/b; System.out.println(c); ,哈哈,可以不做处理!,Exception in thread main java.lang.ArithmeticException: / by zero at com.exp.ExcTest.main(ExcTest.java:11),运行时异常例子,public class RuntimeExceptionProc public static void main(String args) in

8、t i=0,n=0,sum=0; int a=5,6,7,8; for(i=0;i=5;i+) System.out.println(ai);/数组越界,运行时异常 sum+=ai; System.out.println(“平均值”+(sum/n);/异常一旦发生,程序终止,不再执行 ,13,java.lang.ArrayIndexOutOfBoundsException: 4,14,常见的运行时异常,15,四、捕获异常使用trycatchfinally,基本格式 try 可能产生异常的语句 / 不能有其它语句分隔 catch (Etype1 e1) 处理异常1的语句 catch (Etype

9、2 e2) 处理异常2的语句 finally 事后处理语句 ,其中,catch可以有一个或多个,而且至少有一个catch语句或finally语句,try块包含可能产生异常的代码 try块后跟有一个或多个catch块,但最多只有一个会被执行 每个catch块声明其能处理的一种特定类型的异常 每个catch块都是一段异常处理代码 无论是否发生异常,finally块都将被执行,用来完成一些清理工作,如关闭文件等.,16,示例:try-catch捕获和处理异常,public class Try1 public static void main(String args) int i=0,n=0,sum=

10、0; int a=5,6,7,8; try for(i=0;i=5;i+) System.out.println(ai); sum+=ai; System.out.println(“平均值”+(sum/n); catch(ArrayIndexOutOfBoundsException e) System.out.println(数组异常:+e.toString(); catch(Exception e) System.out.println(异常:+e.toString(); ,a4将引发一个数组越界异常,在catch块中处理数组异常,除数不能为0,引发异常,实际上没有发生,在catch块中处理

11、除数不能为0异常,5 6 7 8 数组异常:java.lang.ArrayIndexOutOfBoundsException: 4,try-catch-finally,try块 用指定了一段可能抛出一个或多个异常的代码,同时也指定了它后面catch语句所捕获的异常的范围。 try指定的代码中,当抛出一个异常,后面的代码不会被执行。 catch块 ,可以有多个,每一块处理一个异常。 catch语句的参数包括一个异常类型(必须为Throwable类的子类,指明catch语句所处理的异常类型)和一个异常对象(由运行时系统在try所指定的代码块中生成并由虚拟机捕获)。 内为对象的处理的语句,其中可以调

12、用对象的方法。 finally块 通过finally语句可以指定一块代码,无论try中抛出或不抛出,也无论catch语句的异常类型是否于抛出的异常类型一致,finally都要执行。通常进程资源的清除,如关闭文件。,17,例外:如果try块中存在System.exit(0)语句,那么就不会执行finally块中的代码,因为System.exit(0)会终止当前运行的Java虚拟机,程序会在虚拟机终止前结束执行。,18,捕获异常例子,public class Try1 public static void main(String args) int i=0; int a=5,6,7,8; try

13、for(i=0;i=4;i+) System.out.println(a+i+=+ai); System.out.println(3/0=+(3/0); catch(ArrayIndexOutOfBoundsException e) System.out.println(数组异常:+e.toString(); catch(Exception e) System.out.println(异常:+e.toString(); finally System.out.println(“程序运行结束”); ,注意,当产生异常时,程序从上到下依次判断该异常是否是该catch(Exception_x e)块中

14、Exception_x类或其子类对象。若是,则认为相匹配,执行相应的处理。因此,安排catch语句时,catch的异常应符合子类在前,父类在后;从特殊到一般的原则。 如果没有异常产生,所有的catch块都被略过不执行。 也可以用一个catch语句处理多个异常类型,这时它的异常类型参数应该是这多个异常类型的父类。 程序设计中要根据具体的情况来选择catch语句的异常处理类型。,19,思考,public class Try1 public static void main(String args) int i = 0, sum = 0, n = 0; int a = 5, 6, 7, 8 ; tr

15、y for (i = 0; i = 5; i+) System.out.println(ai); sum += ai; System.out.println(平均值 + (sum / n); catch (Exception e) System.out.println(异常: + e.toString(); catch (ArrayIndexOutOfBoundsException e) System.out.println(数组异常: + e.toString(); ,将上例中两个处理异常的顺序倒过来,对吗?,五、声明抛出异常 throws,声明异常是一个说明性的子句,只能加在方法头部的后边。 格式:返回类型 方法名(参数列表)throws 一个方法声明抛出异常,表示该方法可能抛出所声明的异常,从而要求该方法的调用者,在程序中对这些异常加以注意和处理(如用try-catch-finally)。 若一个方法没有声明异常,则该方法仍可能会抛出异常,只不过这些异常不要求方法的调用者加以注意。 即使一个方法声明抛出异常,该方法仍可能抛出不在声明列表之中的异常。,21,六、手动抛出异常(throw语句),手动抛出异常 格式:throw ; 其中:异常对象必须是Throwable类或其子类的对象,任何从Throwable派生的类都可以用throw语句抛出, 例如:

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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