DEV Community

TANIAOKA, Akihiro
TANIAOKA, Akihiro

Posted on

10章8

このJavaのコードスニペットは、tryブロックと2つのfinallyブロックを含んでいますが、catchブロックはありません。Javaの言語仕様によれば、tryブロックの後にはcatchブロックかfinallyブロックが必要ですが、catchブロックは必須ではありません。しかし、複数のfinallyブロックを持つことは許されていません。

コードをコメントアウトして説明すると以下のようになります:

public class Main {
    public static void main(String[] args) {
        try {
            // tryブロックが開始されます。
            System.out.println("A"); // "A"を出力します。
        // catchブロックがここに来るべきですが、このコードにはありません。
        } finally {
            // tryブロックか、catchブロックの後の最初のfinallyブロック。
            // catchブロックがない場合でも、tryブロックの後にはfinallyが実行されます。
            System.out.println("B"); // "B"を出力します。
        // Javaでは、1つのtryブロックに対して複数のfinallyブロックは不正です。
        } finally {
            // このブロックは不正であり、コンパイルエラーになります。
            System.out.println("C"); // 仮にここが有効だとしても"C"を出力することになりますが、
            // 実際にはこのコードはコンパイルを通過できません。
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

あなたが提供した答えのオプションDは「コンパイルエラーが発生する」というものです。これは、Javaでは一つのtryブロックに対して複数のfinallyブロックを持つことができないため、正しい答えです。実際のところ、このコードをコンパイルすると、2つ目のfinallyブロックがあることによる構文エラーが発生するでしょう。

Top comments (0)