首页 理论教育 子句抛出的异常

子句抛出的异常

时间:2022-02-28 理论教育 版权反馈
【摘要】:try子句发生的异常可以由语句中的某个catch子句捕捉处理,但在执行catch子句内的异常处理代码时也可能再抛出新的异常。此时,原先的异常被遗弃,新的异常从try语句抛出并沿着方法调用栈反方向传递。异常转译使得异常类型与抛出异常对象的对象类型处于相同的抽象层。这有助于查找产生异常的根本原因。学校根据报告的内容进行相应的处理。

8.5.2 catch子句抛出的异常

try子句发生的异常可以由语句中的某个catch子句捕捉处理,但在执行catch子句内的异常处理代码时也可能再抛出新的异常。此时,原先的异常被遗弃,新的异常从try语句抛出并沿着方法调用栈反方向传递。与“没有捕捉到的异常”类似,该新异常或者由外层try语句的catch子句捕捉,或者由方法的调用者处理。

在catch子句中抛出异常,一般有两个目的。

(1)异常转译:把捕获的异常转换为新的不同类型的异常,再抛出新异常对象。异常转译使得异常类型与抛出异常对象的对象类型处于相同的抽象层。

(2)异常链:把原始异常包装为新的异常类,或者说在新的异常类中封装了原始异常类。这有助于查找产生异常的根本原因。

【例8-14】 异常链举例。许多意外情况都可导致不能正常教学,如多媒体故障。现编程模拟一个学校的一个多媒体设备发生故障,导致不能正常教学,并以统一报告形式向学校汇报。学校根据报告的内容进行相应的处理。

img526

img527

程序运行结果:

FacilityException:教学设施问题!多媒体设备故障等需学校自己解决。

NoTeachingException:FacilityException:教学设施问题!多媒体设备故障等需学校自己解决。学校责令有关部门检修多媒体设备。

分析与思考:(1)学生的goToClass()方法产生的FacilityException异常,捕获后被包装成NoTeachingException异常。而该异常在goToClass()方法没有处理,因此,由调用方法run()进行处理。

(2)e.getCause()instanceof FacilityException的含义是对象e.getCause()是否是类FacilityException的实例?是为true,否为false。

(3)NoTeachingException类还应有3个构造方法以及其他方法,有关知识请看其他参考资料。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈