




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第5章章 异常处理异常处理5.1 异常处理基础异常处理基础5.2 异常处理措施异常处理措施 武汉理工大学信息学院Java程序设计实用教程(第4版)12目标目标理解异常的概念理解异常的概念运用运用 try 块、块、catch 块和块和 finally 块处理块处理异常异常运用多重运用多重 catch 块处理异常块处理异常运用关键字运用关键字 throw 处理异常处理异常运用运用JAVA编写和使用自定义异常编写和使用自定义异常武汉理工大学信息学院Java程序设计实用教程(第4版)5.1 异常处理基础异常处理基础5.1.1 异常处理机制的必要性异常处理机制的必要性5.1.2 错误和异常错误和异常3
2、武汉理工大学信息学院Java程序设计实用教程(第4版)5.1.1 异常处理机制的必要性异常处理机制的必要性n面向过程语言错误处理方式的缺陷面向过程语言错误处理方式的缺陷不进行范围检查不进行范围检查 采用采用if语句进行事先判断以防止出现错误。语句进行事先判断以防止出现错误。 n面向对象语言异常处理的思想面向对象语言异常处理的思想将程序正常代码与错误处理代码分开。将程序正常代码与错误处理代码分开。使程序具有处理错误的能力。使程序具有处理错误的能力。 41. 异常不可避免异常不可避免不要指望你的程序永远不会出错不要指望你的程序永远不会出错Java程序运行过程中的异常事件可分为两类:程序运行过程中的
3、异常事件可分为两类:错误错误(Error):JVM系统内部错误、资源耗尽等严重情况系统内部错误、资源耗尽等严重情况异常异常(Exception): 其它因编程错误或偶然的外在因素导致的其它因编程错误或偶然的外在因素导致的一般性问题,例如:一般性问题,例如:对负数开平方根对负数开平方根空指针访问空指针访问试图读取不存在的文件试图读取不存在的文件网络连接中断网络连接中断武汉理工大学信息学院Java程序设计实用教程(第4版)2. Java语言是安全的语言是安全的Java语言提供严密的语法规则。语言提供严密的语法规则。Java在编译和运行时严格检查错误。在编译和运行时严格检查错误。 Java提供异常处
4、理机制。提供异常处理机制。Java提供内存自动管理方式。提供内存自动管理方式。 673. 理解异常的概念理解异常的概念-什么是异常?什么是异常?public class ExceptionRaised public ExceptionRaised() public int calculate( int operand1, int operand2) int result = operand1 / operand2; return result; public static void main(String args) ExceptionRaised obj = new ExceptionRai
5、sed(); int result = obj.calculate(9, 0); System.out.println(result); 异常情况异 常程序突然终止并将控制交给操作系统在运行时发生的错误 武汉理工大学信息学院Java程序设计实用教程(第4版)5.1.2 错误和异常错误和异常错误(错误(error)指程序运行时遇到的硬件或)指程序运行时遇到的硬件或操作系统的错误。操作系统的错误。 Error错误类错误类异常(异常(exception)指在硬件和操作系统正)指在硬件和操作系统正常时,程序遇到的运行错。常时,程序遇到的运行错。 Exception异常异常类类81. 错误例子publi
6、c class RaiseError public static void call(int i)System.out.println(i = + i);call(i+1);public static void main(String args) call(1);Exception in thread main java.lang.StackOverflowErrorat chapter05.RaiseError.call(RaiseError.java:7)at chapter05.RaiseError.call(RaiseError.java:7)public class RaiseExc
7、eption public static void main(String args) java.util.Date d = null;System.out.println(d.getTime();System.out.println(calclate(10,0);private static double calclate(int i, int j) return i/j;2. 异常例子Exception in thread main java.lang.NullPointerExceptionat chapter05.RaiseException.main(RaiseException.j
8、ava:6)3. Error/Exception层次图层次图124. Java异常类异常类 文件结束EOFException找不到文件FileNotFoundExceptionI/O 异常的根类IOException数字转化格式异常,比如字符串到 float 型数字的转换无效NumberFormatException不能加载所需的类ClassNotFoundException方法接收到非法参数IllegalArgumentException数组大小小于或大于实际的数组大小ArrayIndexOutOfBoundException尝试访问 null 对象成员NullPointerExceptio
9、n许多 java.lang 异常的基类RuntimeException异常层次结构的根类Exception算术错误情形,如以零作除数ArithmeticException线程中断InterruptedException说 明异 常武汉理工大学信息学院Java程序设计实用教程(第4版)5. 异常类定义异常类定义public class Throwable implements Serializable public Throwable() public Throwable(String message) public String getMessage() /获得异常信息获得异常信息 publi
10、c String toString() /获得异常对象的描述信息获得异常对象的描述信息 public void printStackTrace() /显示异常栈跟踪信息显示异常栈跟踪信息public class Exception extends Throwable public Exception() public Exception(String s)13武汉理工大学信息学院Java程序设计实用教程(第4版)6. RuntimeException运行异常类运行异常类算术异常算术异常ArithmeticException:除数为:除数为0 空对象异常空对象异常NullPointerExcep
11、tionint a = null;a0 = 1; /对空数组中的元素进行操作对空数组中的元素进行操作String str = null;str.length() /调用空对象的方法调用空对象的方法类型强制转换异常类型强制转换异常ClassCastExceptionObject obj = new Object();String str = (String) obj;14武汉理工大学信息学院Java程序设计实用教程(第4版)举例举例RuntimeException运行异常类运行异常类负数组长度异常负数组长度异常NegativeArraySizeExceptionint a = new int -
12、1;数组下标越界异常数组下标越界异常ArrayIndexOutOfBoundsExceptionint a = new int1;a1 = 1;字符串序号越界异常字符串序号越界异常StringIndexOutOfBoundsException abc.charAt(-1) 数值格式异常数值格式异常NumberFormatExceptionint j = Integer.parseInt(abc); 15武汉理工大学信息学院Java程序设计实用教程(第4版)7. 程序对错误与异常的三种处理方式程序对错误与异常的三种处理方式程序不能处理错误程序不能处理错误程序应避免而不捕获的异常,如除数为程序应避
13、免而不捕获的异常,如除数为0、数组下标越界等。数组下标越界等。必须捕获的异常,如网络连接失败必须捕获的异常,如网络连接失败16武汉理工大学信息学院Java程序设计实用教程(第4版)5.2 异常处理措施异常处理措施 5.2.1 异常处理语句异常处理语句5.2.2 抛出异常抛出异常5.2.3 自定义异常类自定义异常类1718在在 Java Java 应用程序中,异常处理机制为:应用程序中,异常处理机制为:抛出异常,捕捉异常抛出异常,捕捉异常。 抛出异常抛出异常:当一个方法出现错误引发异常时,方法创建异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统。对象并交付运行时系统。 捕获异
14、常捕获异常:在方法抛出异常之后,运行时系统将转为寻找合:在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(适的异常处理器(exception handlerexception handler)。潜在的异常处理器是)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。异常发生时依次存留在调用栈中的方法的集合。1. 异常处理机制19运行时系统从发生异常的方法开始,运行时系统从发生异常的方法开始,依次回查调用栈中的方依次回查调用栈中的方法法,直至找到含有合适异常处理器的方法并执行。当运行时,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适系统遍历调用栈而未
15、找到合适 的异常处理器,异常由的异常处理器,异常由JVMJVM处处理。同时,意味着理。同时,意味着JavaJava程序的终止。程序的终止。2. 异常捕获的顺序203. 异常处理语句异常处理语句-try 和和 catch 块块 2-1trycatch异常执行 catch 后程序继续正常运行程序控制 引发代码块单 元21try 和和 catch 块块 2-2q try 和 catch 块的用法public class ArithmeticExceptionDemo public ArithmeticExceptionDemo() private static int calculate(int i
16、, int j) return i / j;public static void main(String args) ArithmeticExceptionDemo obj = new ArithmeticExceptionDemo();try int result = obj.calculate(9, 0);System.out.println(result); catch (Exception e) System.err.println(发生异常:发生异常: + e.toString();e.printStackTrace();System.out.println(end);如果没有如果没
17、有trycatch,最后最后的的end能否输出能否输出呢?呢?223. finally 块块无异常异常trytry、catch catch 和和 finally finally 块的执行流程块的执行流程Finally语句块是可选的234. 异常处理块的一般形式异常处理块的一般形式trytry / / 要监控错误的代码块要监控错误的代码块 methodGeneratingException(); methodGeneratingException(); catch (Exception e) catch (Exception e) / Exception e / Exception e 的异常处
18、理程序的异常处理程序 finally finally / / 在在 try try 结束前要执行的代码块结束前要执行的代码块 cleanup(); cleanup(); 5. 多重多重 catch 块块3-1一段代码可能会生成多个异常一段代码可能会生成多个异常当引发异常时,会按当引发异常时,会按顺序来查看每个顺序来查看每个 catch catch 语句语句,并执行第,并执行第一个类型与异常类型匹配的语句一个类型与异常类型匹配的语句 (异常类继承关系异常类继承关系)执行其中的一条执行其中的一条 catch catch 语句之后,其他的语句之后,其他的 catch catch 语句将被语句将被忽略
19、忽略 24try . catch(ArrayIndexOutOfBoundsException e) catch(Exception e) public class RaiseMulException private static double calclate(int i, int j) return i / j;public static void main(String args) java.util.Date d = null;try System.out.println(calclate(10, 0);System.out.println(d.getTime(); catch (Ar
20、ithmeticException e) System.out.println(发生异常发生异常1: + e.toString(); catch (NullPointerException e) System.out.println(发生异常发生异常2: + e.toString();System.out.println(over);武汉理工大学信息学院Java程序设计实用教程(第4版)Try catch举例(多举例(多catch-同级别)同级别)25try块中如果有多个语句产生异常,第一个语句产生异常块中如果有多个语句产生异常,第一个语句产生异常后,就会立即陷入到后,就会立即陷入到catch
21、块中个,后面产生异常的语句块中个,后面产生异常的语句不会执行。不会执行。public class RaiseMulException2 public static void main(String args) String str = 123a;java.util.Date d = null;try int i = Integer.parseInt(str); System.out.println(d.getTime(); catch (NumberFormatException ex) System.out.println(str + 字符串不能转换为整数字符串不能转换为整数); catch
22、 (Exception ex) ex.printStackTrace(); 武汉理工大学信息学院Java程序设计实用教程(第4版)Try catch举例(多举例(多catch-不同级别)不同级别)26123a字符串不能转换为整数异常被前一个异常被前一个catch捕获,后捕获,后面就不能在被捕获了。面就不能在被捕获了。武汉理工大学信息学院Java程序设计实用教程(第4版)多重多重catch执行流程执行流程 2728 在toIntArray将字符串数组转换到整形数组中使用了trycatchfinally语句。【例例5.1】 求数组元素的平均值。求数组元素的平均值。6. try-catch语句的范围
23、语句的范围try-catch目的是为了程序能从异常中恢复过来;目的是为了程序能从异常中恢复过来;需要对有可能产生异常的语句定位,并使用需要对有可能产生异常的语句定位,并使用try-catch,而不是把所有语句都包起来,而不是把所有语句都包起来 29public class TryScope public static void main(String args) String strings = 32, one, 10.8, 45 ;float sum = 0;try for (String s : strings)sum += Integer.parseInt(s);System.out.p
24、rintln(sum = + sum); catch (Exception e) e.printStackTrace();武汉理工大学信息学院Java程序设计实用教程(第4版)Try catch范围举例范围举例30能否正确输出能否正确输出87.8呢?呢?武汉理工大学信息学院Java程序设计实用教程(第4版)5.2.2 抛出异常抛出异常1. 抛出自定义异常对象的抛出自定义异常对象的throw语句语句throw 异常对象异常对象public void set(int year, int month, int day) if (month12) throw new Exception(月份错误月份错
25、误);31不想捕获处理异常不想捕获处理异常抛出异常抛出异常public class ThrowsinMethod public static void setMonth(int month) throws Exception if (month12) throw new Exception(月份错误月份错误);public static void main(String args) try setMonth(13); catch (Exception e) e.printStackTrace();武汉理工大学信息学院Java程序设计实用教程(第4版)2. 方法里抛出异常举例方法里抛出异常举例3
26、2java.lang.Exception: 月份错误月份错误 at chapter05.ThrowsinMethod.setMonth(ThrowsinMethod.java:6) at chapter05.ThrowsinMethod.main(ThrowsinMethod.java:12)不再由系统抛出异常不再由系统抛出异常public class ThrowsOnMethod public static void doSomething() throws ClassNotFoundException Class clz = null;clz = Class.forName(RaiseEr
27、ror);System.out.println(over);public static void main(String args) try doSomething(); catch (ClassNotFoundException e) e.printStackTrace();System.out.println(over in main);武汉理工大学信息学院Java程序设计实用教程(第4版)2. 方法上抛出异常举例方法上抛出异常举例33 Java语言安全性检查,异常的抛出和处理不是可有可无的,是被强制要求的。语言安全性检查,异常的抛出和处理不是可有可无的,是被强制要求的。 如上例中,如上例
28、中,Class.forName语句要求必须处理异常;语句要求必须处理异常; 如果如果doSomething不处理异常,而是简单抛出异常,则调用不处理异常,而是简单抛出异常,则调用doSomething的的main方法就要求处理异常。方法就要求处理异常。 如果如果main也不处理,只是抛出异常的话,就由也不处理,只是抛出异常的话,就由JVM来处理异常。来处理异常。345.2.3 自定义异常类自定义异常类自定义异常概念自定义异常概念使用自定义异常的时候使用自定义异常的时候JavaAPI提供的内置异常不一定总能捕获程序提供的内置异常不一定总能捕获程序中发生的所有错误。有时会需要创建用户自定义中发生的
29、所有错误。有时会需要创建用户自定义异常异常 自定义异常需要继承自定义异常需要继承Exception 及其子类及其子类1. 自定义异常类例子自定义异常类例子武汉理工大学信息学院Java程序设计实用教程(第3版)35public class DateException extends Exception public DateException(String s) super(s); public DateException() super(); public void set(int year, int month, int day) throws DateException /设置正确日期设置
30、正确日期 if (year2500) throw new DateException(年份不合适,有效年份为年份不合适,有效年份为02500。); if (month12) throw new DateException(月份错误月份错误); if (daydaysOfMonth(year, month) throw new DateException(日期错误日期错误); this.aday.set(year, month, day); 当调用一个抛出异常的方法,当调用一个抛出异常的方法,调用者必须处理这个异常。调用者必须处理这个异常。 如构造方法必须处理如构造方法必须处理DateExcep
31、tion. Main方法方法new对象时对象时小结小结内容和要求:内容和要求:发现各种程序错误,采取不同的手段排除错误。发现各种程序错误,采取不同的手段排除错误。理解异常处理机制的运行方式,掌握理解异常处理机制的运行方式,掌握Java异常的抛异常的抛出、捕获及处理方法。出、捕获及处理方法。熟悉自定义异常在程序设计中的作用。熟悉自定义异常在程序设计中的作用。重点:重点:掌握掌握try语句捕获异常并处理。语句捕获异常并处理。1.难点:难点:捕获并处理异常,抛出异常、使异常在方法捕获并处理异常,抛出异常、使异常在方法间传递。间传递。1. 程序中的错误有哪几种?分别能够在什么时刻被发现?习习 题题武汉
32、理工大学信息学院Java程序设计实用教程(第4版)37【答】 程序错误按照性质可分为3类:语法错、语义错、逻辑错。1) 语法错:违反语法规范的错误成为语法错( syntax error ),这类错误通常在编译时发现,又称为编译错,如标识符未声明、表达式中运算符与操作数类型不兼容、变量赋值时的类型与声明时的类型不匹配、括号不匹配、语句末缺少分号等。2) 语义错:如果在程序的语法上正确,但在语义上存在错误,则称为语义错( semantic error),又称为运行错(run-time error),语义错不能被编译系统发现,只有到程序运行时才能被发现,如输入数据格式错、除数为0错、给变量赋予超出其
33、范围的值错等。3) 逻辑错:如果程序通过编译,可运行,但运行结果与期望值不符,则这类错误称为逻辑错(logic error),例如,由于循环条件不正确而没有结果,循环次数不对等因素导致计算结果不正确等。2. Java为什么要采用异常处理机制?Java的异常处理是怎样实现的?异常处理机制能够解决程序中遇到的所有错误吗?哪些错误不是异常处理能够解决的?【答】 异常处理和捕获和处理运行时错误的一种机制。异常处理机制使程序具有处理错误的能力。 即使发生了运行错,应用程序能够捕获异常并及时处理异常,使程序从运行错误中很好地恢复并继续运行,而不会导致程序运行非正常终止。而且如果当前方法没有能力处理异常,还可以将异常转交给调用者处理。 异常处理机制将运行时错误封装成若干错误类和异常类,并提供异常处理语句用于处理在程序中实现对运行时错误的发现和及时处理。 异常处理机制并不能解决程序中的所有错误,例如内存溢出、栈溢出
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年叉车理论考试题及答案
- 2025年地理信息科学职业资格考试试题及答案
- 旅游度假酒店餐饮综合营销规划
- 住房供给调控预案
- 浙江国企招聘2025台州市椒江区社会事业发展集团有限公司公开招聘工作人员及特殊人才3人笔试历年参考题库附带答案详解
- 2025年电力继电试题及答案
- 企业管理中的价值观与行为规范
- 汽车零部件供应链风险防范与2025年优化方案案例分析研究报告
- 端午敬老活动方案
- 美容护肤活动方案
- 医院死亡报卡培训课件
- catia考试图纸题目及答案
- 2025年江西省高考物理真题
- 高中通用技术作品设计方案七篇
- MT-T 1199-2023 煤矿用防爆柴油机无轨胶轮运输车辆通用安全技术条件
- Linux系统基础操作培训文档
- 酿造车间绩效考核制度
- 石油化工工艺装置蒸汽管道配管的设计
- 人教版五年级道德与法治上册第7课《中华民族一家亲》优秀课件
- 肝癌的中西医治疗
- 芳华电影介绍模板课件
评论
0/150
提交评论