Java中的异常处理:解开歧义
在一个令人费解的Java异常处理场景中,一个大学问题提出了以下代码片段:
// Exception Heirarchy
class MyExc1 extends Exception {}
class MyExc2 extends Exception {}
class MyExc3 extends MyExc2 {}
// Main Class
public class C1 {
public static void main(String[] args) throws Exception {
try {
System.out.print(1);
q();
}
catch (Exception i) {
throw new MyExc2();
}
finally {
System.out.print(2);
throw new MyExc1();
}
}
static void q() throws Exception {
try {
throw new MyExc1();
}
catch (Exception y) {
}
finally {
System.out.print(3);
throw new Exception();
}
}
}
该问题询问其输出,提供的答案是“13Exception in thread main MyExc2”。然而,正确的答案是“132Exception in thread main MyExc1”。
澄清歧义
要破译这个谜题,必须了解异常的优先级:
后果:
追溯执行
将此原则应用于代码:
初始执行:
Catch 块异常:
Main 的 Try 块中恢复执行:
Finally Block异常:
输出:
最终输出是“132Exception in thread main MyExc1”,因为传播出去的异常main 方法的主方法是第 16 行抛出的 MyExc1。第 19 行抛出的 MyExc2 在第 16 行抛出 MyExc1 时中止。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3