Catch 和 Final 子句中的异常处理
在 Java 中处理异常处理时,掌握 catch 和 finally 子句之间的相互作用至关重要。考虑以下为大学作业提供的示例:
class MyExc1 extends Exception {}
class MyExc2 extends Exception {}
class MyExc3 extends MyExc2 {}
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。”
为什么 MyExc2 消失
理解的关键正确的输出在于catch 和finally 子句的行为。当 catch 或 finally 块中引发异常时,它会对流程产生重大影响。下面是细分:
finally 块中的异常: 类似地,如果在一个finally块,原来的异常也被中止。不过,有一个关键点需要注意:
跟踪异常
根据这些原则跟踪执行,我们可以看到:
main 中的Catch 块:
最后在 main 中的块:
因此,正确的输出是“132Exception in thread main MyExc1”。 MyExc2 异常被“遗忘”,因为在处理 MyExc2 的 catch 块的 finally 块中引发了新异常 (MyExc1)。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3