文档介绍:第6章 Java语言中的异常
异常
为了加强程序的鲁棒性(强壮性,robust),程序设计时,必须考虑到可能发生的异常事件并做出相应的处理
例6-1
虽然程序的鲁棒性加强了,但结构臃肿,大量的错误处理代码混杂在程序中,可读性差。目标程序也会增大许多
出错返回信息量太少,无法更确切的了解错误状况或原因。特别是,当出现上述语句没包含的情况时,程序将束手无策
Java异常处理机制
预定义了Exception类。在Exception类中定义了程序产生异常的条件
简化了代码的编写。常见的异常也可以统一处理,提高了效率,代码重用率高
允许程序员自己编写特殊的异常处理程序,以满足更独特的需要
抛出和捕获
方法的运行过程中,如果发生了异常,称程序产生了一个异常事件,相应地生成异常对象。生成异常对象并把它提交给运行时系统的这一过程称为抛出(throw)异常
异常发生时,Java运行时系统从生成对象的代码块开始进行回溯,找到包含相应异常处理的方法,并把异常对象交给该方法处理,这一过程称为捕获(catch)
例6-2 用异常处理方式来重写例6-1
异常机制的优点
把异常处理代码从常规代码中分离出来,增加了可读性,方便修改
按异常类型和差别进行分组,即从预定义的类Exception中派生自己的子类,对无法预测的异常也可以进行捕获和处理,克服了传统方法中错误信息有限的问题
异常的处理借助于调用堆栈按先近后远的原则进行
异常传播方式
method1
method2
method3
method4
探测抛出异常
传
递
捕获处理异常
调用
异常层次结构
使用异常机制情况
当方法因为自身无法控制的原因而不能完成其任务
文件不存在,网络连接无法建立等
处理在方法、类库、类中抛出的异常
;
在大的项目中采用统一的方式处理异常时
编写文字处理器一类的程序等;
不经常发生但却可能发生的故障
异常示例
简单扩展前面使用过的程序1-,循环打印一些信息。程序执行到第4次循环时,会发生异常代码见程序6-1
异常处理
try,catch和finally语句
例6-3
try {
// 此处为抛出具体异常的代码
} catch (ExceptionType1 e) {
// 抛出ExceptionType1异常时要执行的代码
} catch (ExceptionType2 e) {
// 抛出ExceptionType2异常时要执行的代码
...
} catch (ExceptionTypek e) {
// 抛出ExceptionTypek异常时要执行的代码
}finally {
// 必须执行的代码
}