このJavaのコードは、sample()
メソッドを呼び出していて、その中で例外が発生しています。sample()
メソッドは、try
ブロック内で RuntimeException
を発生させて、それを catch
ブロックで捕捉しています。catch
ブロックでは return 10;
が実行され、その後 finally
ブロックが実行されます。
Javaでは、finally
ブロックは、try
ブロックまたは catch
ブロックの後で必ず実行されます。もし finally
ブロック内に return
ステートメントがあれば、それは try
や catch
ブロック内の 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 を返す(これが実際に返される値)
}
}
}
ここで重要なのは、finally
ブロックがある場合、その中の return
ステートメントが try
や catch
ブロックの return
を上書きするという点です。この挙動はJavaのプログラミングにおいて非常に重要な概念です。
Top comments (0)