《【教学课件】第5章异常处理.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第5章异常处理.ppt(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第5章章 异常处理异常处理5.1 程序错误与处理程序错误与处理5.2 Java的异常处理的异常处理Java2程序设计实用教程(第2版)5.1 程序错误与处理程序错误与处理1.5.1.1 程序错误、发现时刻及错误处理程序错误、发现时刻及错误处理原则原则2.5.1.2 面向过程与面向对象语言的错误面向过程与面向对象语言的错误处理方式比较处理方式比较3.5.1.3 Java的错误和异常的错误和异常Java2程序设计实用教程(第2版)5.1.1 程序错误、发现时刻及错误程序错误、发现时刻及错误处理原则处理原则1.语法错语法错违反语法规范的错误称为语法错,在编译时发现。违反语法规范的错误称为语法错,在
2、编译时发现。2.语义错语义错在语义上存在错误,则称为语义错,运行时才能被在语义上存在错误,则称为语义错,运行时才能被发现。发现。3.逻辑错逻辑错系统无法发现逻辑错。系统无法发现逻辑错。Java2程序设计实用教程(第2版)5.1.2 面向过程与面向对象语言的面向过程与面向对象语言的错误处理方式比较错误处理方式比较1.面向过程语言错误处理方式的缺陷面向过程语言错误处理方式的缺陷不进行范围检查不进行范围检查 采用采用if语句进行事先判断以防止出现错误。语句进行事先判断以防止出现错误。2.面向对象语言异常处理的思想面向对象语言异常处理的思想异常处理机制的优越之处体现在以下两方面。异常处理机制的优越之处
3、体现在以下两方面。从语法上看,异常处理语句将程序正常代码与错误处从语法上看,异常处理语句将程序正常代码与错误处理代码分开,使程序结构清晰,算法重点突出,可读理代码分开,使程序结构清晰,算法重点突出,可读性强。性强。从运行效果看,异常处理语句使程序具有处理错误的从运行效果看,异常处理语句使程序具有处理错误的能力。能力。Java2程序设计实用教程(第2版)5.1.3 Java的错误和异常的错误和异常1.Java语言是安全的语言是安全的Java语言提供严密的语法规则。语言提供严密的语法规则。Java在编译和运行时严格检查错误。在编译和运行时严格检查错误。Java提供异常处理机制。提供异常处理机制。J
4、ava提供内存自动管理方式。提供内存自动管理方式。2.错误与异常错误与异常错误(错误(error)指程序运行时遇到的硬件或操作系统的)指程序运行时遇到的硬件或操作系统的错误。错误。异常(异常(exception)指在硬件和操作系统正常时,程)指在硬件和操作系统正常时,程序遇到的运行错。序遇到的运行错。Java2程序设计实用教程(第2版)图图5.1 Java程序发现错误和异常程序发现错误和异常 Java2程序设计实用教程(第2版)3.错误类和异常类错误类和异常类1.Error错误类错误类2.Exception异常类异常类除数为除数为0的算术异常、数组下标越界异常、空指针的算术异常、数组下标越界异
5、常、空指针异常等。异常等。【例例5.1】发现除数为发现除数为0错。错。运行时能够发现整数除法中除数为运行时能够发现整数除法中除数为0的语义错的语义错运行时不能发现浮点数除法中除数为运行时不能发现浮点数除法中除数为0的语义错的语义错【例例5.2】发现数组下标越界的语义错。发现数组下标越界的语义错。Java2程序设计实用教程(第2版)4.程序对错误与异常的三种处理程序对错误与异常的三种处理方式方式1.程序不能处理错误程序不能处理错误2.程序应避免而不捕获的异常,如除数为程序应避免而不捕获的异常,如除数为0、数组下标越界等。、数组下标越界等。3.必须捕获的异常必须捕获的异常Java2程序设计实用教程
6、(第2版)5.2 Java的异常处理的异常处理1.5.2.1 异常类说明异常类说明2.5.2.2 异常处理语句异常处理语句3.5.2.3 抛出异常抛出异常4.5.2.4 自定义异常类自定义异常类Java2程序设计实用教程(第2版)5.2.1 异常类说明异常类说明1.Exception异常类异常类public class Throwable implements Serializable public Throwable()public Throwable(String message)public String getMessage()/获得异常信息获得异常信息 public String t
7、oString()/获得异常对象的描述信息获得异常对象的描述信息 public void printStackTrace()/显示异常栈跟踪信息显示异常栈跟踪信息public class Exception extends Throwable public Exception()public Exception(String s)Java2程序设计实用教程(第2版)2.RuntimeException运行异常运行异常类类1.算术异常算术异常ArithmeticException:除数为:除数为0 2.空对象异常空对象异常NullPointerExceptionint a=null;a0=1;/
8、对空数组中的元素进行操作,产生空对象异常对空数组中的元素进行操作,产生空对象异常String str=null;System.out.println(str.length();/调用空对象的方法,产生空对象异常调用空对象的方法,产生空对象异常3.类型强制转换异常类型强制转换异常ClassCastExceptionObject obj=new Object();String str=(String)obj;Java2程序设计实用教程(第2版)2.RuntimeException运行异常运行异常类类4.负数组长度异常负数组长度异常NegativeArraySizeExceptionint a=ne
9、w int-1;/产生负数组长度异常产生负数组长度异常5.数组下标越界异常数组下标越界异常ArrayIndexOutOfBoundsExceptionint a=new int1;a1=1;/产生数组下标越界异常产生数组下标越界异常6.数值格式异常数值格式异常NumberFormatExceptionint j=Integer.parseInt(abc);/产生数值格式异常产生数值格式异常Java2程序设计实用教程(第2版)5.2.2 异常处理语句异常处理语句1.异常处理语句语法异常处理语句语法try 语句语句1 /存在潜在异常的代码存在潜在异常的代码catch(异常类异常类 异常对象异常对象
10、)语句语句2 /捕获到异常并进行处理的代码捕获到异常并进行处理的代码finally 语句语句3 /最后必须执行的代码,无论是否捕获到异常最后必须执行的代码,无论是否捕获到异常【例例5.3】异常的捕获和处理。异常的捕获和处理。Java2程序设计实用教程(第2版)图图5.4 异常处理语句的执行流程异常处理语句的执行流程 Java2程序设计实用教程(第2版)【例例5.4】求数组元素的平均值。求数组元素的平均值。1.average()方法中采用方法中采用if语句对可能出语句对可能出现的运行时错误进行事先处理现的运行时错误进行事先处理2.tointArray()方法采用异常处理语句对方法采用异常处理语句
11、对产生的运行时错误进行事后处理产生的运行时错误进行事后处理3.采用命令行参数作为输入值采用命令行参数作为输入值Java2程序设计实用教程(第2版)5.2.3 抛出异常抛出异常1.抛出自定义异常对象的抛出自定义异常对象的throw语句语句throw 异常对象异常对象public void set(int age)if(age0&age100)this.age=age;else throw new Exception(IllegalAgeData);/抛出异常抛出异常【例例5.5】抛出自定义异常对象。抛出自定义异常对象。Java2程序设计实用教程(第2版)2.方法声明抛出异常的方法声明抛出异常的t
12、hrows子子句句修饰符修饰符 返回值类型返回值类型 方法方法(参数列表参数列表)throws 异常类异常类public static int parseInt(String s)throws NumberFormatException【例例5.6】声明抛出异常的方法与方法调用者处理声明抛出异常的方法与方法调用者处理异常。异常。构造方法和重载的构造方法和重载的set()方法声明抛出异常。方法声明抛出异常。main()方法声明抛出异常交由系统处理。方法声明抛出异常交由系统处理。Java2程序设计实用教程(第2版)5.2.4 自定义异常类自定义异常类【例例5.7】自定义异常类。自定义异常类。pub
13、lic 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类中的其他方类中的其他方法将捕获并处理该异常。法将捕获并处理该异常。