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的異常處理機制:
追蹤異常流程
考慮到這一點,讓我們一步步追蹤程式碼片段的執行:
理解輸出
從這個追蹤中,我們可以看到:
以上是儘管在 catch 區塊中拋出了 MyExc2 異常,為什麼程式碼片段仍會產生輸出「132Exception in thread main MyExc1」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!