Java中的異常處理:解開歧義
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();
}
}
}
//異常層次結構
類別 MyExc1 擴充異常 {}
類別 MyExc2 擴充異常 {}
類別 MyExc3 擴充 MyExc2 {}
// 主類
公共課 C1 {
公共靜態無效主(字串[] args)拋出異常{
嘗試 {
系統.out.print(1);
q();
}
捕獲(異常我){
拋出新的 MyExc2();
}
最後 {
系統.out.print(2);
拋出新的 MyExc1();
}
}
static void q() 拋出例外狀況 {
嘗試 {
拋出新的 MyExc1();
}
捕獲(異常 y){
}
最後 {
系統.out.print(3);
拋出新的異常();
}
}
}問題詢問其輸出,提供的答案是「13Exception in thread main MyExc2」。然而,正確的答案是「132Exception in thread main MyExc1」。
澄清歧義
當catch或finally區塊中拋出新的例外狀況時,目前正在處理的例外狀況將被中止。
追溯執行
輸出:
最終輸出是「132Exception in thread main MyExc1”,因為傳播出去的異常main 方法的主方法是第16 行拋出的MyExc1。第 19 行拋出的 MyExc2 在第 16 行拋出 MyExc1 時中止。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3