Java 中的异常处理:解开歧义
在一个令人费解的 Java 异常处理场景中,一个大学问题提出了以下代码片段:
<code class="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(); } } }</code>
问题询问其输出,提供的答案是“13Exception in thread main MyExc2”。然而,正确答案是“132Exception in thread main MyExc1”。
澄清歧义
要破译这个谜题,必须了解异常的优先级:
后果:
回溯执行
将此原则应用于代码:
初始执行:
Catch 块异常:
在 Main 的 Try 块中恢复执行:
Finally 块异常:
输出:
最终输出是“132Exception in thread main MyExc1”,因为传播出去的异常main 方法的主方法是第 16 行抛出的 MyExc1。第 19 行抛出的 MyExc2 在第 16 行抛出 MyExc1 时中止。
以上是为什么 Java 异常处理代码会产生'132Exception in thread main MyExc1”而不是'13Exception in thread main MyExc2”?的详细内容。更多信息请关注PHP中文网其他相关文章!