第5异常处理.ppt
第5章 异常处理,5.1 程序错误与处理 5.2 Java的异常处理,Java2程序设计实用教程(第2版),5.1 程序错误与处理,5.1.1 程序错误、发现时刻及错误处理原则 5.1.2 面向过程与面向对象语言的错误处理方式比较 5.1.3 Java的错误和异常,Java2程序设计实用教程(第2版),5.1.1 程序错误、发现时刻及错误处理原则,语法错 违反语法规范的错误称为语法错,在编译时发现。 语义错 在语义上存在错误,则称为语义错,运行时才能被发现。 逻辑错 系统无法发现逻辑错。,Java2程序设计实用教程(第2版),5.1.2 面向过程与面向对象语言的错误处理方式比较,面向过程语言错误处理方式的缺陷 不进行范围检查 采用if语句进行事先判断以防止出现错误。 面向对象语言异常处理的思想 异常处理机制的优越之处体现在以下两方面。 从语法上看,异常处理语句将程序正常代码与错误处理代码分开,使程序结构清晰,算法重点突出,可读性强。 从运行效果看,异常处理语句使程序具有处理错误的能力。,Java2程序设计实用教程(第2版),5.1.3 Java的错误和异常,Java语言是安全的 Java语言提供严密的语法规则。 Java在编译和运行时严格检查错误。 Java提供异常处理机制。 Java提供内存自动管理方式。 错误与异常 错误(error)指程序运行时遇到的硬件或操作系统的错误。 异常(exception)指在硬件和操作系统正常时,程序遇到的运行错。,Java2程序设计实用教程(第2版),图5.1 Java程序发现错误和异常,Java2程序设计实用教程(第2版),3. 错误类和异常类,Error错误类 Exception异常类 除数为0的算术异常、数组下标越界异常、空指针异常等。 【例5.1】 发现除数为0错。 运行时能够发现整数除法中除数为0的语义错 运行时不能发现浮点数除法中除数为0的语义错 【例5.2】 发现数组下标越界的语义错。,Java2程序设计实用教程(第2版),4. 程序对错误与异常的三种处理方式,程序不能处理错误 程序应避免而不捕获的异常,如除数为0、数组下标越界等。 必须捕获的异常,Java2程序设计实用教程(第2版),5.2 Java的异常处理,5.2.1 异常类说明 5.2.2 异常处理语句 5.2.3 抛出异常 5.2.4 自定义异常类,Java2程序设计实用教程(第2版),5.2.1 异常类说明,Exception异常类 public class Throwable implements Serializable public Throwable() public 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版),2. RuntimeException运行异常类,算术异常ArithmeticException:除数为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版),2. RuntimeException运行异常类,负数组长度异常NegativeArraySizeException int a = new int -1; /产生负数组长度异常 数组下标越界异常ArrayIndexOutOfBoundsException int a = new int1; a1 = 1; /产生数组下标越界异常 数值格式异常NumberFormatException int j = Integer.parseInt(“abc“); /产生数值格式异常,Java2程序设计实用教程(第2版),5.2.2 异常处理语句,异常处理语句语法 try 语句1 /存在潜在异常的代码 catch (异常类 异常对象) 语句2 /捕获到异常并进行处理的代码 finally 语句3 /最后必须执行的代码,无论是否捕获到异常 【例5.3】 异常的捕获和处理。,Java2程序设计实用教程(第2版),图5.4 异常处理语句的执行流程,Java2程序设计实用教程(第2版),【例5.4】 求数组元素的平均值。,average()方法中采用if语句对可能出现的运行时错误进行事先处理 tointArray()方法采用异常处理语句对产生的运行时错误进行事后处理 采用命令行参数作为输入值,Java2程序设计实用教程(第2版),5.2.3 抛出异常,抛出自定义异常对象的throw语句 throw 异常对象 public void set(int age) if (age0 /抛出异常 【例5.5】 抛出自定义异常对象。,Java2程序设计实用教程(第2版),2. 方法声明抛出异常的throws子句,修饰符 返回值类型 方法(参数列表) throws 异常类 public static int parseInt(String s) throws NumberFormatException 【例5.6】 声明抛出异常的方法与方法调用者处理异常。 构造方法和重载的set()方法声明抛出异常。 main()方法声明抛出异常交由系统处理。,Java2程序设计实用教程(第2版),5.2.4 自定义异常类,【例5.7】 自定义异常类。 public class IllegalAgeException extends Exception /无效年龄异常类 public IllegalAgeException(String s) public IllegalAgeException() /捕获自定义异常类,而非Exception类 catch(IllegalAgeException e) e.printStackTrace(); /显示异常栈跟踪信息 ,Java2程序设计实用教程(第2版),实验5 异常的抛出、捕获并处理,为例3.3的Date2类定义一个异常类,当set()方法的3个整型参数不能构成一个合法日期值时,抛出异常;Date2类中的其他方法将捕获并处理该异常。,