第8章异常处理机制.ppt

上传人:sccc 文档编号:5294005 上传时间:2023-06-23 格式:PPT 页数:44 大小:343.52KB
返回 下载 相关 举报
第8章异常处理机制.ppt_第1页
第1页 / 共44页
第8章异常处理机制.ppt_第2页
第2页 / 共44页
第8章异常处理机制.ppt_第3页
第3页 / 共44页
第8章异常处理机制.ppt_第4页
第4页 / 共44页
第8章异常处理机制.ppt_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《第8章异常处理机制.ppt》由会员分享,可在线阅读,更多相关《第8章异常处理机制.ppt(44页珍藏版)》请在三一办公上搜索。

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

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

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

4、ption类构造函数:public Exception();public Exception(String s);可以接受字符串参数传入的信息,该信息通常是对该异常所对应的错误的描述。,8.2 异常和异常类,Exception类从父亲Throwable那里还继承了若干方法,其中常用的有:1)public String toString();toString()方法返回描述当前Exception 类信息的字符串。2)public void printStackTrace();printStackTrace()方法没有返回值,它的功能是完成一个打印操作,在当前的标准输出(一般就是屏幕)上打印输出当

5、前例外对象的堆栈使用轨迹,也即程序先后调用执行了哪些对象或类的哪些方法,使得运行过程中产生了这个例外对象。,8.2 异常和异常类,系统定义的运行异常这些子类有些是系统事先定义好并包含在Java类库中的,称为系统定义的运行异常 见书P165表81,8.2 异常和异常类,用户自定义的异常对于某个应用所特有的运行错误,则需要编程人员根据程序的特殊逻辑在用户程序里自己创建用户自定义的异常类和异常对象 用户定义的异常通常采用Exception作为异常类的父类,8.2 异常和异常类,class MyException extends Exceptionpublic MyException()public

6、MyException(String s)super(s);public String toString(),8.2 异常和异常类,创建用户自定义异常时,一般需要完成如下的工作:1)声明一个新的异常类,使之以Exception类或其他某个已经存在的系统异常类或用户异常为父类。2)为新的异常类定义属性和方法,或重载父类的属性和方法,使这些属性和方法能够体现该类所对应的错误的信息。,8.3 异常的抛出,Java程序在运行时如果引发了一个可以识别的错误,就会产生一个与该错误相对应的异常类的对象,把这个过程叫做异常的抛出,实际是相应异常类对象的实例的抛出。根据异常类的不同,抛出异常的方式有系统自动抛出

7、和用户抛出两种,8.3 异常的抛出,1、系统自动抛出所用的系统定义的运行错误异常都是由系统自动地抛出 见书例8。1在程序中新建一个ArithmeticException类的对象,即抛出了一个算术运行异常,8.3 异常的抛出,2、用户通过语句抛出异常用户自定义的异常不可能依靠系统自动抛出,而必须由用户用Java语句抛出,在Java语句中,throw语句用来明确地抛出一个“异常”,8.3 异常的抛出,用throw语句抛出的格式返回类型 方法名(参数列表)throws 要抛出的异常类名列表throw 异常类实例;,8.3 异常的抛出,注意:1)一般当程序中满足某个条件时才抛出异常;往往把throw语

8、句放在if语句的if分支中,if(I100)throw(new MyException());,8.3 异常的抛出,2)含有throw的语句的方法,应当在方法头定义中增加如下的部分:throws 要抛出的异常类名列表这样做主要是为了通知欲调用这个方法的上层方法,准备接受和处理它在运行中可能会抛出的异常 如果方法中的throw语句不止一个,则应该在方法头throws中列出所有可能的异常,8.3 异常的抛出,如:void MyMethod()throws MyException/可能在程序中抛出MyException异常if(I100)throw(new MyException());,8.3 异

9、常的抛出,若某个方法MyMethod可能产生Exception1、Exception2和Exception3三种异常,而它们又都是Super_Exception类的子类,8.3 异常的抛出,void MyMethod()throws Exception1,Exception2,Exception3/可能在程序中抛出这三个异常 void MyMethod()throws Super_Exception/可能在程序中抛出这三个异常的父类,8.3 异常的抛出,3)Java语言要求所有用throws关键字声明的类和用throw抛出的对象必须是Throwable类或其子类。如果你试图抛出一个不是可抛出(

10、Throwable)对象,Java编译器将会报错。,8.3 异常的抛出,异常抛出实例:见书P168-170程序中要用到一个Employee雇员类,这个Employee类中有两个属性,分别是雇员的姓名m_EmpName和当前工资m_EmpSalary,在这个雇员类上加了一些限制,固定雇员的工资不得低于工资的最低标准800元,雇员每次工资的变化幅度不得高于原工资的20。为上面的限制定义了两个用户异常IllegalSalaryExceptionIllegalSalryChangeException 见书P168页,8.3 异常的抛出,此时,在雇员Employee类中,雇员的构造函数Employee(

11、)和修改工资的方法setEmpSalary()由于可能出现上面的两种错误,所以有可能抛出这两种异常见例169,8.4 异常的处理,主要考虑如何捕捉异常,捕捉异常后程序如何跳转,以及如何写异常处理语句1trycatchfinally 块格式如下:,8.4 异常的处理,try/可能出现异常的程序代码语句1语句ncatch(异常类型1,异常对象e1)/进行异常类型1的处理catch(异常类型2,异常对象e2)/进行异常类型2的处理catch(异常类型3,异常对象e3)/进行异常类型3的处理finally/其他处理程序代码语句1语句n,8.4 异常的处理,1)try在try语句的 中包含了可能会抛出一

12、个或多个异常的一段程序代码这些代码实际上指定了它后面的catch块所能捕捉的异常的范围。Java程序运行到try块中的语句时如果产生了异常,就不再继续执行该try块中其他的语句,而是直接进入catch块中寻找第一个与之匹配的异常类型并进行处理。,8.4 异常的处理,2)catch块catch语句的参数类似于方法的定义,包括一个异常类型和一个异常对象。异常类型必须为Throwable类的子类,它指明了catch语句所处理的异常类型;异常对象则由Java运行时系统在try所指定的程序代码块中抛出的大括号中包含异常对象的处理的方法代码。,8.4 异常的处理,catch语句可以有多个,分别处理不同类型

13、的异常。Java运行时系统从上到下分别对每个catch语句处理的异常类型进行检测,直到找到与之相匹配的catch语句为止。这里,类型匹配指catch中的异常类型与生成的异常对象的类型完全一致或者是异常对象的父类,因此,catch语句的排序顺序应该是从特殊到一般。(考虑为什么?),8.4 异常的处理,3)finally块finally语句可以说是为异常处理事件提供的一个清理机制,一般用来关闭文件或释放其他系统资源 在try-catch-finally语句中可以没有finally部分的语句。,8.4 异常的处理,如果没有finally部分,则当try指定的程序代码抛出一个异常时,其他的程序代码就不

14、会被执行;如果存在finally部分,则不论try块中是否发生了异常,是否执行过catch部分的语句,都要执行finally部分的语句。可见,finally部分的语句为异常处理提供了一个统一的出口。见例8。2,8.4 异常的处理,2、多异常处理一个try块可能会产生多种不同的异常,如果希望能采取不同的方法来处理这些例外,就需要使用多异常处理机制。多异常处理是通过在一个try块后面定义若干个catch块来实现的,每个catch块用来接收和处理一种特定的异常对象 通过catch块的参数来判断一个异常对象是否应为本catch块接收和处理的异常。,8.4 异常的处理,被哪个catch块获取,根据异常对

15、象与catch块的异常参数的匹配情况:当它们满足下面三个条件的任何一个时,认为异常对象和参数匹配:1)异常对象与参数属于相同的例外类。2)异常对象属于参数例外类的子类。3)异常对象实现了参数所定义的接口。,8.4 异常的处理,如果try块产生的异常对象被第一个catch块所接收,则程序的流程将直接跳转到这个catch语句块中,语句块执行完后就退出当前方法,try块中尚未执行的语句和其他的catch块将被忽略如果try块产生的异常对象与第一个catch块不匹配,系统将自动转到第二个catch块进行匹配,如果第二个仍不匹配,就转向第三个、第四个直到找到一个可以接收该异常对象的catch块,完成流程

16、的跳转。,8.4 异常的处理,如果所有的catch块都不能与当前的异常对象匹配,程序流程将返回到调用该方法的上层方法,如果这个上层方法中定义了与所产生的异常对象相匹配的catch块,流程就跳转到这个catch块中,否则继续回溯更上层的方法;如果所有的方法中都找不到合适的catch块,则由Java运行系统来处理这个异常对象。此时通常会中止程序的执行,退出虚拟机返回操作系统,并在标准输出上打印相关的异常信息。,8.4 异常的处理,若try块中所有语句的执行都没有引发异常,则所有的catch块都会被忽略而不执行。,8.4 异常的处理,注意:1)catch块中的语句应根据异常的不同执行不同的操作所以在

17、处理多异常时应注意认真设计各catch块的排列顺序。一般地处理较具体和较常见的异常的catch块应放在前面,而可以与多种异常相匹配的catch块应放在较后的位置。,8.4 异常的处理,下面的例子中错误地把以Exception为参数的catch块放在了第一的位置:tryEmp.setEmpSalary(cs);msg=new String(Emp.toString();catch(Exception e)/将捕捉到所有的异常对象,msg=new String(e.toString();catch(IllegalSalaryException ise)/下面两种异常块不可能执行msg=new String(ise.toString();catch(IllegalSalaryChangeException isce)msg=new String(Emp.toString()+isce.toString();由于所有的异常都是Exception类的子类,这个catch块就可以与所有的异常对象匹配,排在它后面的catch块永远不被使用,本章小节,1、什么是异常;2、java语言中的异常和异常类3、为什么要有用户自定义的异常4、异常如何抛出5、异常如何捕捉6、多异常如何处理7、注意下面的关键字:throw,throws try catch finally,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号