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 區塊異常:
第15 行:第15 行被執行(列印2)。
Finally 區塊異常:
第 23 行:在 main() 的 finally 區塊中拋出。
第 23 行:異常中止 MyExc1 的傳播。 第23 行:異常開始展開輸出:以上是為什麼 Java 異常處理程式碼會產生「132Exception in thread main MyExc1」而不是「13Exception in thread main MyExc2」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!