第05章 异常处理.ppt_第1页
第05章 异常处理.ppt_第2页
第05章 异常处理.ppt_第3页
第05章 异常处理.ppt_第4页
第05章 异常处理.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、面向对象程序设计及Java,第5章 异常处理,第5章 异常处理,Java异常处理基础 异常的分类 异常处理措施 抛出异常 自定义异常类,Java2程序设计实用教程(第2版),5.1异常处理机制的必要性,面向过程语言错误处理方式的缺陷 不进行范围检查 采用if语句进行事先判断以防止出现错误。 面向对象语言异常处理的思想 将程序正常代码与错误处理代码分开。 使程序具有处理错误的能力。,Java2程序设计实用教程(第2版),5.1 Java异常处理基础,语法错 违反语法规范的错误称为语法错,在编译时发现。 语义错 在语义上存在错误则称为语义错,运行时被发现。 逻辑错 运行结果与预期不符,即程序员自己

2、将程序功能编 写的不正确,系统无法发现逻辑错。,Java2程序设计实用教程(第2版),程序运行时出现的问题分为:错误与异常 错误:指程序运行时遇到的硬件、操作系统、其他软件或操作错误。如,程序进入死循环,没找到.class文件,或没有main方法等。致命性错误:程序本身不能处理错误。 Error类:当产生错误时, Java虚拟机生成、抛出Error 类对象并捕获、处理,而Java应用程序不能。 例如:没有main方法,则产生类定义未找到错误(NoClassDefFoundError);当没有可分配内存,则产生内存溢出错误(OutOfMemoryError)。,5.1 Java异常处理基础,Ja

3、va2程序设计实用教程(第2版),5.1 Java异常处理基础,程序运行时出现的问题分为:错误与异常 异常:指在硬件和操作系统正常时,程序遇到的运行错。如,除数为0,打开文件不存在,网络连接中断。非致命性异常:可以通过异常处理机制解决此类问题。 Exception类:当异常产生时, Java虚拟机或Java应用程序生成、抛出Exception类对象并捕获、处理。即Exception 类和从其派生来的所有异常类都是能由Java应用程序生成、抛出、捕获及进行恢复处理的异常类型。每种异常对应于Exception的一个子类,对象中包含错误的位置和特征信息。,Java2程序设计实用教程(第2版),5.1

4、 Java异常处理基础,Exception类分为:运行时异常和非运行时异常 运行时异常:是指由程序本身错误引起的异常,这类异常程序设计时大多可以避免;如,除数为0,数组下标越界。 (RuntimeException) 非运行时异常:是指由程序运行环境错误引起的异常,这类异常必须捕获并处理;如,打开文件不存在,网络连接中断。,Java2程序设计实用教程(第2版),异常类的层次结构(P130),Java2程序设计实用教程(第2版),5.1 Java异常处理基础,public class Throwable implements Serializable public Throwable() pub

5、lic Throwable(String message) public String getMessage() /获得异常信息 public String toString() /获得异常对象的描述信息 public void printStackTrace() /显示异常栈跟踪信息 public class Exception extends Throwable public Exception() public Exception(String s) ,Java2程序设计实用教程(第2版),RuntimeException类(P131),算术异常ArithmeticException:除

6、数为0 空对象异常NullPointerException int a = null; a0 = 1; /对空数组中的元素进行操作 String str = null; System.out.println(str.length(); /调用空对象的方法,产生空对象异常 类型强制转换异常ClassCastException Object obj = new Object(); String str = (String) obj;,Java2程序设计实用教程(第2版),RuntimeException类(P131),负数组长度异常NegativeArraySizeException int a

7、= new int -1;/产生负数组长度异常 数组下标越界异常ArrayIndexOutOfBoundsException int a = new int1; a1 = 1;/产生数组下标越界异常 数值格式异常NumberFormatException int j = Integer.parseInt(abc); /产生数值格式异常,Java2程序设计实用教程(第2版),5.1 Java异常处理基础,2. 错误与异常有三种类型 (1)程序不能处理的错误: Error类是错误类。这类错误一般由系统处理。程序本身不能捕获和处理 (2)程序应避免而不捕获的异常:可预见的 对于RuntimeExce

8、ption在程序设计正确时是可以避免的,通常应避免去捕获和处理。 (3)必须捕获的异常:不可预见的 例: MyJava5Try3.java必须捕获的异常举例,注意:Java编译器要求必须捕获或声明抛出所有非运行时异常,如FileNotFoundException 、IOException 等,否则编译无法通过。 但运行时异常可以不做处理,因为全部处理可能对程序的可读性和运行效率产生影响。,异常对性能的影响有两个方面: 异常的创建,捕获和处理都需要付出代价。 就算异常没有发生,包含异常处理的代码也会比不包含异常处理的代码需要的运行时间更多。,Java2程序设计实用教程(第2版),图5.1 Jav

9、a程序发现错误和异常,编译,程序非正常 终止运行,有语法错,?,有,Java程序,修改,运行,出现运行时错误,?,错误,程序运行 正常结束,有,没有,没有,异常,程序非正常 终止运行,事先处理 避免异常,事后处理 异常处理,修改,在源程序中加入异常处理代码,在程序运行出现异常时,由异常处理代码调整程序走向,使程序仍然可以正常运行至结束!异常机制提供了程序退出的安全通道。 异常处理是一种对异常进行事后处理的机制。,Java2程序设计实用教程(第2版),5.2 异常处理措施,生成抛出异常:产生一个异常事件,生成一个异常对象。Java虚拟机或Java应用程序 throw new Exception(

10、); 捕获处理异常:找到可处理此异常对象的方法所在的位置,执行处理方法对异常对象进行处理。 Java虚拟机或Java应用程序 try-catch-finally 1.异常的产生 例5.1 MyJava5Try1.java,Java2程序设计实用教程(第2版),5.2 异常处理措施,Java程序在执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行系统,这个过程称为生成抛出异常。 当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获处理异常。 如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相

11、应的Java程序也将退出。,例52 MyJava5Try2.java,Java2程序设计实用教程(第2版),5.2 异常处理措施,2. 异常处理语句语法 try 语句1 catch (异常类 异常对象) 语句2 finally 语句3 ,try中存在潜在异常的代码,当try语句中的代码产生异常时,根据异常的不同,由不同catch语句中的代码对异常进行捕获并处理,如果没有异常,则catch语句不执行,无论是否产生异常都必须执行finally中的代码,Java2程序设计实用教程(第2版),5.2 异常处理措施,2. 异常处理语句语法 try 语句1 /存在潜在异常的代码 catch (Except

12、ion e) 语句2 /捕获到异常并进行处理的代码 finally 语句3 /最后必须执行的代码,无论是否有异常 ,注意:try所限定的代码中,当某一语句抛出一个异常时, try代码段中其后的代码不会被执行。,catch语句可以有多个,分别处理不同类的异常,但至少要有一个。,类型匹配是指catch所处理的异常类型与生成的异常对象的类型完全一致或是它的超类。,若某一异常对象,有几个catch异常处理程序与他相匹配,那么执行第一个相匹配的catch异常处理程序。,因此,多个catch语句的排序顺序是从子类到父类,从特殊到一般。,一些必要的处理内容提供了统一的出口,finally语句是可以省略。,J

13、ava2程序设计实用教程(第2版),图5.2 异常处理语句的执行流程,出现运行时错误 Java抛出异常 中断执行语句序列,没有运行时 错误,没有 产生异常,try,语句1,catch,(捕获异常对象),异常处理,finally,语句3,是,异常处理后,程序停止运行,catch捕获异常对象,否,Java2程序设计实用教程(第2版),5.2 异常处理措施,3. 面向对象语言异常处理的思想 从语法上看,异常处理语句将程序正常代码与错误处理代码分开,使程序结构清晰,算法重点突出,可读性强。 从运行效果看,异常处理语句使程序具有处理错误的能力。,Java2程序设计实用教程(第2版),5.3 抛出异常,生

14、成抛出异常:产生一个异常事件,生成一个异常对象。Java虚拟机或Java应用程序 throw new Exception(); 捕获处理异常:找到可处理此异常对象的方法所在的位置,执行处理方法对异常对象进行处理。 Java虚拟机或Java应用程序 try-catch-finally 1.使用throw语句抛出异常 throw ,只能是Exception类及其子类的对象,Java2程序设计实用教程(第2版),5.3 抛出异常,2.为什么主动生成抛出异常 例: MyJava5Try4.java MyJava5Try8.java MyJava5Try5.java 生成抛出异常的既可以是Java系统;

15、也可以是程序员自己编写的程序代码。 对于处理不了的异常可以再次抛出,因为有些异常在本级中只能处理一部分内容,有些处理需要在更高一级的环境中完成,所以可以再次抛出异常。,Java2程序设计实用教程(第2版),5.3 抛出异常,3.方法声明抛出异常 (1)定义抛出异常的方法 声明格式: 修饰符 返回值类型 方法名( 参数列表 )throws 异常类 (2)由调用方法处理异常 例: 程序MyJava5Try6.java 4.由方法抛出异常交系统处理,Java2程序设计实用教程(第2版),5.4 自定义异常类【例5.7】,public class IllegalAgeException extends Exception /无效年龄异常类 public IllegalAgeException(String s) public IllegalAgeException() /捕获自定义异常类,而非Exception类 catch(IllegalAgeExcepti

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论