DEV Community

TANIAOKA, Akihiro
TANIAOKA, Akihiro

Posted on

10章6

このJavaのコードは、sample() メソッドを呼び出していて、その中で例外が発生しています。sample() メソッドは、try ブロック内で RuntimeException を発生させて、それを catch ブロックで捕捉しています。catch ブロックでは return 10; が実行され、その後 finally ブロックが実行されます。

Javaでは、finally ブロックは、try ブロックまたは catch ブロックの後で必ず実行されます。もし finally ブロック内に return ステートメントがあれば、それは trycatch ブロック内の return ステートメントを上書きします。したがって、このコードでは finally ブロック内の return 20; が最終的な戻り値となります。

答えがB、つまり 20が返される となる理由は、finally ブロックの return 20; が最後に実行されるからです。sample() メソッドは 20 を返し、これが main メソッドで変数 result に格納され、System.out.println(result); によりコンソールに出力されます。

コメントを加えたコードを以下に示します:

public class Main {
    public static void main(String[] args) {
        int result = sample(); // sample() メソッドから返された値を result に格納
        System.out.println(result); // result の値をコンソールに出力
    }

    private static int sample() {
        try {
            throw new RuntimeException(); // RuntimeException を発生させる
        } catch (RuntimeException e) {
            return 10; // 例外が捕捉されたら 10 を返す
        } finally {
            return 20; // 最終的に 20 を返す(これが実際に返される値)
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

ここで重要なのは、finally ブロックがある場合、その中の return ステートメントが trycatch ブロックの return を上書きするという点です。この挙動はJavaのプログラミングにおいて非常に重要な概念です。

Top comments (0)