return があっても finally は実行される
出力はどれか。
public class Main {
static int f() {
try {
return 1;
} finally {
System.out.print("F");
}
}
public static void main(String[] args) {
System.out.println(f());
}
}
- A
F1 - B
1F - C
1 - D コンパイルエラーになる
正解と解説を見る
正解: A
- A: return 1 の前に finally が実行されて F が出力され、その後 main で戻り値の 1 が出力されます。
- B: f() の中の finally の F が先に出力されます。1 を出力するのは f() から戻った後の main です。
- C: return しても finally は必ず実行されるので、F も出力されます。
- D: try-finally で return する書き方は問題なくコンパイルできます。
ポイント
- try の中で return しても、メソッドを抜ける前に finally が実行されます。