Catch 和 Final 块中的异常处理
在最近的一次大学 Java 作业中,一名学生遇到了以下代码片段,并被要求预测它的输出:
<code class="java">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(); } } }</code>
当学生回答“13Exception in thread main MyExc2”时,他们惊讶地发现正确答案是“132Exception in thread main MyExc1”。
了解 Catch 和 Final 块中的异常传播
要理解正确的输出,了解 catch 和 Final 块中异常的行为至关重要。根据Java的异常处理机制:
跟踪异常流程
考虑到这一点,让我们一步步跟踪代码片段的执行:
理解输出
从这个跟踪中,我们可以看到:
因此,正确的输出是“132Exception in thread main MyExc1。”
以上是尽管在 catch 块中抛出了 MyExc2 异常,为什么代码片段仍会产生输出'132Exception in thread main MyExc1”?的详细内容。更多信息请关注PHP中文网其他相关文章!