Catch 和Final 子句中的異常處理
在Java 中處理異常處理時,掌握catch 和finally 子句之間的相互作用至關重要。考慮以下提供大學作業的範例:
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();
}
}
}
詢問此程式碼的輸出的問題。雖然有些人可能回答“13Exception in thread main MyExc2”,但正確答案是“132Exception in thread main MyExc1。”
為什麼MyExc2 消失
理解的正確關鍵的輸出在於catch 和finally 子句的行為。當 catch 或 finally 區塊中引發異常時,它會對流程產生重大影響。以下是細分:
finally 區塊中的異常: 類似地,如果在一個finally區塊,原來的異常也被中止。不過,有一個關鍵點要注意:
追蹤異常
q() 中的finally 區塊列印「3」並拋出異常。
因此,正確的輸出是「132Exception in thread main MyExc1」。 MyExc2 異常被“遺忘”,因為在處理 MyExc2 的 catch 區塊的 finally 區塊中引發了新異常 (MyExc1)。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3