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();
}
}
}
質問はその出力を求めており、提供された答えは「13Exception in thread main MyExc2」でした。ただし、正しい答えは「132Exception in thread main MyExc1」です。
曖昧さの明確化
このパズルを解読するには、例外の優先順位を理解することが不可欠です。
結果:
実行の再トレース
この原則をコードに適用します:
初期実行:
Catch ブロック例外:
Main の Try ブロックで実行が再開されます:
Finally Block Exception:
]出力:
例外が伝播するため、最終出力は「132Exception in thread main MyExc1」になります。 main メソッドのメイン メソッドは、16 行目でスローされた MyExc1 です。16 行目で MyExc1 がスローされると、19 行目でスローされた MyExc2 は中止されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3