Catch 句と Final 句での例外処理
Java で例外処理を扱う場合、catch 句と Final 句の間の相互作用を把握することが重要です。 。大学の課題に対して提供された次の例を考えてみましょう:
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 ブロック内で例外がスローされると、フローに重大な影響を及ぼします。内訳は次のとおりです:
Exception infinally block: 同様に、新しい例外がスローされた場合も同様です。 Finally ブロックでは、元の例外も中止されます。ただし、注意すべき重要な点があります:
例外のトレース
これらの原則に基づいて実行をトレースすると、次のことがわかります。
main の Catch ブロック: ]
メインの最終ブロック:
したがって、正しい出力は「132Exception in thread main MyExc1」です。 MyExc2 例外は、MyExc2.
を処理していた catch ブロックのfinally ブロックで新しい例外 (MyExc1) がスローされるため、「忘れられた」状態になります。免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3