この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)