第八讲 异常处理 北京理工大学计算机系金旭亮
异常处理 第八讲 北京理工大学计算机系 金旭亮
关于异常 异常( EXception):发生于程序执行期间,表 明出现了一个非法的运行状况 例如:数组越界 021/224 北京理工大学计算机系(共28页)
2021/2/24 北京理工大学计算机系(共28页) 2 关于异常 ▪ 异常 (Exception):发生于程序执行期间,表 明出现了一个非法的运行状况。 例如:数组越界
观看Jaa异常示例 >melon. java >异常处理的目的是提供不同的错误处理技术, 使程序更稳定,更安全 ≯异常处理的主要用途是提供准确的错误消息, 解释失败的原因、位置和错误类型等,同时 提供一定的恢复能力,尽可能地降低出错的 机率 021/2/24 北京理工大学计算机系(共28页)
2021/2/24 北京理工大学计算机系(共28页) 3 观看Java异常示例 ►melon.java ►异常处理的目的是提供不同的错误处理技术, 使程序更稳定,更安全; ►异常处理的主要用途是提供准确的错误消息, 解释失败的原因、位置和错误类型等,同时 提供一定的恢复能力,尽可能地降低出错的 机率
在程序中使用异常处理技术 没有任何异常处理代码:仅适用于编写不重 要的程序,如讲课中的示例 当异常发生时,结束应用程序。这是很不好 的一种方法,因为程序占用的瓷源可能没有 归还系统; 当导常发生时,捕获它,并根据情况进行处 理,可能会结束程序,可能会提示重试操作, 可能会忽略异常并继续运行。 021/2/24 北京理工大学计算机系(共28页)
2021/2/24 北京理工大学计算机系(共28页) 4 在程序中使用异常处理技术 ►没有任何异常处理代码:仅适用于编写不重 要的程序,如讲课中的示例。 ►当异常发生时,结束应用程序。这是很不好 的一种方法,因为程序占用的资源可能没有 归还系统; ►当导常发生时,捕获它,并根据情况进行处 理,可能会结束程序,可能会提示重试操作, 可能会忽略异常并继续运行
try语句块 try i 可能发生运行错误的代码; catch(异常类型异常对象引用) 用于处理是常的代码 finally 所有的异常都派生自 Exception类。 021/224 北京理工大学计算机系(共28页)
2021/2/24 北京理工大学计算机系(共28页) 5 try 语句块 try { 可能发生运行错误的代码; } catch ( 异常类型 异常对象引用 ) { 用于处理异常的代码 } finally { } 所有的异常都派生自Exception类
Java异常处理基础 当程序检测到出现了一个错误时会抛出一个异常对 象。异常处理代码会捕获并处理这个错误 >把可能会发生错误的代码放进txy语句块中 Catch语句块中的代码用于处理错误 不管是否有异常发生,£ina11y语句块中的语句始终保 证被执行。 关键字 throws用于生成一个可被系统捕获的异常 对象 修改 melon. java程序以实现异常捕获 021/224 北京理工大学计算机系(共28页)
2021/2/24 北京理工大学计算机系(共28页) 6 Java异常处理基础 ► 当程序检测到出现了一个错误时会抛出一个异常对 象。异常处理代码会捕获并处理这个错误。 ► 把可能会发生错误的代码放进try语句块中。 ▪ Catch语句块中的代码用于处理错误。 ▪ 不管是否有异常发生,finally语句块中的语句始终保 证被执行。 ► 关键字throws用于生成一个可被系统捕获的异常 对象 修改melon.java程序以实现异常捕获
抛出异常 Throw语句可以抛出一个继承自 Throwab1e 类的对象 Throwab1e类有两个直接子类: 类 Exception:出现的问题是可以被捕获的; 类 FError:严重错误,无法被捕获 当异常发生时,程序控制流程由try语句块 跳转到 catch语句块 021/2/24 北京理工大学计算机系(共28页)
2021/2/24 北京理工大学计算机系(共28页) 7 抛出异常 ►Throw语句可以抛出一个继承自Throwable 类的对象 ►Throwable类有两个直接子类: ▪ 类Exception:出现的问题是可以被捕获的; ▪ 类Error:严重错误,无法被捕获。 ►当异常发生时,程序控制流程由try语句块 跳转到catch语句块
捕获一个异常 >使用 catch语句,只能捕获 Exception类及 其子类的对象 ≯如果没有提供合适的出错处理代码,程序将 会结束 可以有多个 catch语句块,每个代码块捕获 种异常 021/2/24 北京理工大学计算机系(共28页)
2021/2/24 北京理工大学计算机系(共28页) 8 捕获一个异常 ►使用 catch语句,只能捕获Exception类及 其子类的对象 ►如果没有提供合适的出错处理代码,程序将 会结束。 ►可以有多个catch语句块,每个代码块捕获 一种异常
关于异常捕获(一) 认为在异常处理后控制将返回 throw后的第 条语句会导致错误; ≯指定由逗号分开的 catch参数表是语法错误, catch只能有一个参数 个捕获 Exception对象的 catch语句块可以捕 获所有异常; 个相同类型的异常是语法错ch块捕获两 >在某个try块后有两个不同的c 021/2/24 北京理工大学计算机系(共28页)
2021/2/24 北京理工大学计算机系(共28页) 9 关于异常捕获(一) ►认为在异常处理后控制将返回throw后的第一 条语句会导致错误; ►指定由逗号分开的catch参数表是语法错误, catch只能有一个参数; ►一个捕获Exception对象的catch语句块可以捕 获所有异常; ►在某个try块后有两个不同的catch 块捕获两 个相同类型的异常是语法错误;
关于异常捕获(二) >将 catch( Exception e放在别的 catch块前面会 使这些 catch块都不执行,因此JaVa不会编译 这个程序 021/224 北京理工大学计算机系(共28页)
2021/2/24 北京理工大学计算机系(共28页) 10 关于异常捕获(二) ►将catch(Exception e)放在别的catch块前面会 使这些catch块都不执行,因此Java不会编译 这个程序