Catch 和Final 子句中的異常處理
在Java 中處理異常處理時,掌握catch 和finally 子句之間的相互作用至關重要。考慮以下為大學作業提供的範例:
<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”。
為什麼 MyExc2 消失
理解的關鍵正確的輸出在於catch 和finally 子句的行為。當 catch 或 finally 區塊中引發異常時,它會對流程產生重大影響。以下是細分:
finally 區塊中的異常: 類似地,如果在一個finally區塊,原來的異常也被中止。不過,有一個關鍵點要注意:
追蹤異常
根據這些原則追蹤執行,我們可以看到:
mainmain中的try 區塊列印“1”並呼叫q()。
在 q() 內部,try 區塊拋出 MyExc1。MyExc2 被拋出到這個區塊中,中止原來的 MyExc1。
以上是為什麼在這個 Java 異常處理範例中「MyExc2」異常消失了?的詳細內容。更多資訊請關注PHP中文網其他相關文章!