マルチキャッチの変数に代入する
このコードを実行するとどうなるか。
public class Main {
public static void main(String[] args) {
try {
int x = 1 / 0;
} catch (ArithmeticException | NullPointerException e) {
e = new ArithmeticException();
System.out.println("caught");
}
}
}
- A
caughtと出力される - B 実行時に例外が発生する
- C コンパイルエラーになる
- D 何も出力されない
正解と解説を見る
正解: C
- A: マルチキャッチの変数 e は暗黙に final なので、代入するとコンパイルエラーです。実行まで進まないので、何も出力されません。
- B: コンパイルの時点でエラーになるので、実行時の例外にはなりません。
- C: マルチキャッチの例外変数は暗黙に final です。e = new ArithmeticException() がコンパイルエラーになります。
- D: コンパイルエラーなので実行できません。
ポイント
- マルチキャッチの変数は暗黙的に final で、再代入できません。1つの型だけの catch なら再代入できます。