《异常处理机制》

上传人:资****亨 文档编号:214296730 上传时间:2021-11-23 格式:PPT 页数:44 大小:338.50KB
返回 下载 相关 举报
《异常处理机制》_第1页
第1页 / 共44页
《异常处理机制》_第2页
第2页 / 共44页
《异常处理机制》_第3页
第3页 / 共44页
《异常处理机制》_第4页
第4页 / 共44页
《异常处理机制》_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《《异常处理机制》》由会员分享,可在线阅读,更多相关《《异常处理机制》(44页珍藏版)》请在金锄头文库上搜索。

1、单击此处编辑母版标题样式单击此处编辑母版副标题样式第8章异常处理机制学习导读n本章将介绍Java语言中的高级特性:异常处理、异常处理提供对错误的捕捉和处理机制课程结构n什么是异常(Java编程中的错误)n异常和异常类n异常的抛出n异常的处理8.1java中错误n1编译错误n编译错误是由于编写的程序存在语法问题,未能通过编译产生的,它由语言的编译系统负责检测和报告。n没有编译错误是一个程序能正常运行的基本条件,只有所有的编译错误都改正了,源代码才可以被成功地编译成目标码或字节码8.1java中错误n2运行错误n运行错误是在程序的运行过程中产生的错误。根据性质不同n运行错误还可以分为系统运行错误和

2、逻辑运行错误。8.1java中错误n系统运行错误n系统运行错误是指程序在执行过程中引发了操作系统的问题n所以不排除系统错误,程序就不能正常地工作8.1java中错误n逻辑运行错误n逻辑运行错误是指程序不能实现编程人员的设计意图和设计功能而产生的错误nJava的运行错误就是Java的异常。8.2异常和异常类n异常是一个对象,它继承自Throwable类,所有的Throwable类的子孙类所产生的对象都是例外.n每个异常类都代表了一种运行错误,n异常类中包含了该运行错误的信息和处理错误的方法等内容8.2异常和异常类nJava的异常处理机制n每当Java程序运行过程中发生一个可识别的运行错误时,(即

3、该错误有一个异常类与之相对应时),系统都会产生一个相应的该异常类的对象,即产生一个异常。n一旦一个异常对象产生了,系统中就一定要有相应的机制来处理它,确保不会产生死机、死循环或其他对操作系统的损害,从而保证了整个程序运行的安全性8.2异常和异常类nError:由Java虚拟机生成并抛出,Java程序不做处理.nRuntimeException(被0除等系统错误,数组下标超范围):由系统检测,用户的Java程序可不做处理,系统将它们交给缺省的异常处理程序.nException(程序中的问题,可预知的):Java编译器要求Java程序必须捕获或声明所有的非运行时异常n用户自己产生异常8.2异常和异

4、常类要处理ThrowableRuntimeException用户自己产生的异常ErrorException缺省的异常处理程序由用户捕获或声明并处理不做处理8.2异常和异常类nException类n构造函数:npublicException();npublicException(Strings);可以接受字符串参数传入的信息,该信息通常是对该异常所对应的错误的描述。8.2异常和异常类nException类从父亲Throwable那里还继承了若干方法,其中常用的有:n1)publicStringtoString();ntoString()方法返回描述当前Exception类信息的字符串。n2)pu

5、blicvoidprintStackTrace();nprintStackTrace()方法没有返回值,它的功能是完成一个打印操作,在当前的标准输出(一般就是屏幕)上打印输出当前例外对象的堆栈使用轨迹,也即程序先后调用执行了哪些对象或类的哪些方法,使得运行过程中产生了这个例外对象。8.2异常和异常类n系统定义的运行异常n这些子类有些是系统事先定义好并包含在Java类库中的,称为系统定义的运行异常n见书P165表818.2异常和异常类n用户自定义的异常n对于某个应用所特有的运行错误,则需要编程人员根据程序的特殊逻辑在用户程序里自己创建用户自定义的异常类和异常对象n用户定义的异常通常采用Excep

6、tion作为异常类的父类8.2异常和异常类oclassMyExceptionextendsExceptionopublicMyException()oopublicMyException(Strings)osuper(s);oo publicStringtoString()oooo8.2异常和异常类n创建用户自定义异常时,一般需要完成如下的工作:n1)声明一个新的异常类,使之以Exception类或其他某个已经存在的系统异常类或用户异常为父类。n2)为新的异常类定义属性和方法,或重载父类的属性和方法,使这些属性和方法能够体现该类所对应的错误的信息。8.3异常的抛出n Java程序在运行时如果引

7、发了一个可以识别的错误,就会产生一个与该错误相对应的异常类的对象,把这个过程叫做异常的抛出,n实际是相应异常类对象的实例的抛出。n根据异常类的不同,抛出异常的方式有系统自动抛出和用户抛出两种 8.3异常的抛出n 1、系统自动抛出n所用的系统定义的运行错误异常都是由系统自动地抛出 n见书例8。1n在程序中新建一个ArithmeticException类的对象,即抛出了一个算术运行异常 8.3异常的抛出n2、用户通过语句抛出异常n用户自定义的异常不可能依靠系统自动抛出,而必须由用户用Java语句抛出,n在Java语句中,throw语句用来明确地抛出一个“异常”8.3异常的抛出n用throw语句抛出

8、的格式o返回类型方法名(参数列表)throws要抛出的异常类名列表oothrow异常类实例;oo8.3异常的抛出n 注意:n1)一般当程序中满足某个条件时才抛出异常;n往往把throw语句放在if语句的if分支中,oif(I100)othrow(newMyException()); 8.3异常的抛出n 2)含有throw的语句的方法,应当在方法头定义中增加如下的部分:othrows要抛出的异常类名列表n这样做主要是为了通知欲调用这个方法的上层方法,准备接受和处理它在运行中可能会抛出的异常n如果方法中的throw语句不止一个,则应该在方法头throws中列出所有可能的异常8.3异常的抛出n如:o

9、voidMyMethod()throwsMyException/可能在程序中抛出MyException异常ooif(I100)othrow(newMyException());oo 8.3异常的抛出n若某个方法MyMethod可能产生Exception1、Exception2和Exception3三种异常,而它们又都是Super_Exception类的子类8.3异常的抛出o voidMyMethod()throwsException1,Exception2,Exception3o/可能在程序中抛出这三个异常o ovoidMyMethod()throwsSuper_Exceptiono/可能在程

10、序中抛出这三个异常的父类o8.3异常的抛出n3)Java语言要求所有用throws关键字声明的类和用throw抛出的对象必须是Throwable类或其子类。n如果你试图抛出一个不是可抛出(Throwable)对象,Java编译器将会报错。8.3异常的抛出n 异常抛出实例:n见书P168-170n程序中要用到一个Employee雇员类,这个Employee类中有两个属性,分别是雇员的姓名m_EmpName和当前工资m_EmpSalary,n在这个雇员类上加了一些限制,固定雇员的工资不得低于工资的最低标准800元,雇员每次工资的变化幅度不得高于原工资的20。n为上面的限制定义了两个用户异常oIll

11、egalSalaryExceptionoIllegalSalryChangeException见书P168页8.3异常的抛出n此时,在雇员Employee类中,雇员的构造函数Employee()和修改工资的方法setEmpSalary()由于可能出现上面的两种错误,所以有可能抛出这两种异常n见例169 8.4异常的处理n 主要考虑如何捕捉异常,捕捉异常后程序如何跳转,以及如何写异常处理语句n1trycatchfinally块n格式如下:8.4异常的处理o try/可能出现异常的程序代码o语句1oo语句noocatch(异常类型1,异常对象e1)o/进行异常类型1的处理oocatch(异常类型2

12、,异常对象e2)o/进行异常类型2的处理oocatch(异常类型3,异常对象e3)o/进行异常类型3的处理ooofinally/其他处理程序代码o语句1oo语句no 8.4异常的处理n1)tryn在try语句的 中包含了可能会抛出一个或多个异常的一段程序代码n这些代码实际上指定了它后面的catch块所能捕捉的异常的范围。nJava程序运行到try块中的语句时如果产生了异常,就不再继续执行该try块中其他的语句,而是直接进入catch块中寻找第一个与之匹配的异常类型并进行处理。 8.4异常的处理n 2)catch块ncatch语句的参数类似于方法的定义,包括一个异常类型和一个异常对象。n异常类型

13、必须为Throwable类的子类,它指明了catch语句所处理的异常类型;n异常对象则由Java运行时系统在try所指定的程序代码块中抛出的n大括号中包含异常对象的处理的方法代码。8.4异常的处理ncatch语句可以有多个,分别处理不同类型的异常。nJava运行时系统从上到下分别对每个catch语句处理的异常类型进行检测,直到找到与之相匹配的catch语句为止。n这里,类型匹配指catch中的异常类型与生成的异常对象的类型完全一致或者是异常对象的父类,n因此,catch语句的排序顺序应该是从特殊到一般。(考虑为什么?) 8.4异常的处理n3)finally块nfinally语句可以说是为异常处

14、理事件提供的一个清理机制,一般用来关闭文件或释放其他系统资源n在try-catch-finally语句中可以没有finally部分的语句。n 8.4异常的处理n如果没有finally部分,则当try指定的程序代码抛出一个异常时,其他的程序代码就不会被执行;n如果存在finally部分,则不论try块中是否发生了异常,是否执行过catch部分的语句,都要执行finally部分的语句。n可见,finally部分的语句为异常处理提供了一个统一的出口。n见例8。2 8.4异常的处理n2、多异常处理n一个try块可能会产生多种不同的异常,如果希望能采取不同的方法来处理这些例外,就需要使用多异常处理机制。

15、n多异常处理是通过在一个try块后面定义若干个catch块来实现的,每个catch块用来接收和处理一种特定的异常对象n通过catch块的参数来判断一个异常对象是否应为本catch块接收和处理的异常。 8.4异常的处理n被哪个catch块获取,根据异常对象与catch块的异常参数的匹配情况:当它们满足下面三个条件的任何一个时,认为异常对象和参数匹配:n1)异常对象与参数属于相同的例外类。n2)异常对象属于参数例外类的子类。n3)异常对象实现了参数所定义的接口。8.4异常的处理n如果try块产生的异常对象被第一个catch块所接收,则程序的流程将直接跳转到这个catch语句块中,语句块执行完后就退

16、出当前方法,try块中尚未执行的语句和其他的catch块将被忽略n如果try块产生的异常对象与第一个catch块不匹配,系统将自动转到第二个catch块进行匹配,如果第二个仍不匹配,就转向第三个、第四个直到找到一个可以接收该异常对象的catch块,完成流程的跳转。8.4异常的处理n如果所有的catch块都不能与当前的异常对象匹配,n程序流程将返回到调用该方法的上层方法,如果这个上层方法中定义了与所产生的异常对象相匹配的catch块,流程就跳转到这个catch块中,否则继续回溯更上层的方法;n如果所有的方法中都找不到合适的catch块,则由Java运行系统来处理这个异常对象。此时通常会中止程序的执行,退出虚拟机返回操作系统,并在标准输出上打印相关的异常信息。 8.4异常的处理n若try块中所有语句的执行都没有引发异常,则所有的catch块都会被忽略而不执行。8.4异常的处理n注意:n1)catch块中的语句应根据异常的不同执行不同的操作n所以在处理多异常时应注意认真设计各catch块的排列顺序。一般地处理较具体和较常见的异常的catch块应放在前面,而可以与多种异常相匹配的catch块应

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

最新文档


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

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