finally の中の return
出力はどれか。
public class Main {
static int f() {
try {
throw new RuntimeException();
} catch (RuntimeException e) {
return 1;
} finally {
return 2;
}
}
public static void main(String[] args) {
System.out.println(f());
}
}
- A
2 - B
1 - C
12 - D コンパイルエラーになる
正解と解説を見る
正解: A
- A: catch の return 1 の後に finally が実行され、finally の return 2 で戻り値が上書きされます。
- B: finally の return が catch の return を上書きするので、1 にはなりません。
- C: メソッドの戻り値は1つだけで、println は1回しか呼ばれません。
- D: finally に return を書くことは (おすすめはされませんが) 文法上できます。
ポイント
- finally で return すると、catch の return は上書きされます。実際のコードでは避けるべき書き方です。