マルチキャッチに親子関係の例外
このコードを実行するとどうなるか。
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
throw new IOException("x");
} catch (IOException | Exception e) {
System.out.println("caught");
}
}
}
- A
caughtと出力される - B 実行時に例外が発生する
- C コンパイルエラーになる
- D 何も出力されない
正解と解説を見る
正解: C
- A: マルチキャッチに親子関係のある例外を並べているので、コンパイルエラーです。実行まで進まないので、何も出力されません。
- B: コンパイルの時点でエラーになるので、実行時の例外にはなりません。
- C: IOException は Exception の子です。マルチキャッチに親子関係のある型は並べられないのでコンパイルエラーになります。
- D: コンパイルエラーなので実行できません。
ポイント
- マルチキャッチには、親子関係にある例外を並べられません。Exception だけで IOException も捕まえられるからです。