1. ホーム
  2. java

[解決済み] Java の例外が捕捉されない?

2022-04-23 20:31:39

質問

小さな 理論的 try-catch構文に関する問題です。

昨日、Javaの実技試験を受けたのですが、次の例がよくわかりません。

try {
    try {
        System.out.print("A");
        throw new Exception("1");
    } catch (Exception e) {
        System.out.print("B");
        throw new Exception("2");
    } finally {
        System.out.print("C");
        throw new Exception("3");
    }
} catch (Exception e) {
    System.out.print(e.getMessage());
}

質問は、"どのような出力になるのか、でした。

てっきりAB2C3になると思っていたのですが、BUTサプライズです。

正解はABC3(テスト済みで本当にそうなっている)。

質問ですが、Exception("2")はどこに行ったのでしょうか?

どのように解決するのですか?

からの Java言語仕様書14.20.2。 :

理由Rでcatchブロックが突然終了した場合、finallyブロックが実行されます。そのとき、選択肢がある。

  • finallyブロックが正常に終了した場合、try文は理由Rで突然終了する。

  • もしfinallyブロックが理由Sで突然終了したら、try文は理由Sで突然終了する(理由Rは破棄される)。 .

そこで、例外を投げるキャッチブロックがある場合。

try {
    // ...
} catch (Exception e) {
    throw new Exception("2");
}

が、例外を投げるfinallyブロックもあります。

} finally {
    throw new Exception("3");
}

Exception("2") は破棄され Exception("3") が伝搬されます。