マルチキャッチと普通の catch を組み合わせる
出力はどれか。
public class Main {
public static void main(String[] args) {
Object o = "text";
try {
Integer n = (Integer) o;
} catch (NullPointerException | ArithmeticException e) {
System.out.print("A");
} catch (ClassCastException e) {
System.out.print("B");
} finally {
System.out.print("F");
}
}
}
- A
BF - B
AF - C
F - D コンパイルエラーになる
正解と解説を見る
正解: A
- A: String を Integer にキャストして ClassCastException が発生し、2つ目の catch で B、finally で F です。
- B: 発生するのは ClassCastException なので、1つ目のマルチキャッチには当てはまりません。
- C: 2つ目の catch で ClassCastException を捕まえるので、B も出力されます。
- D: マルチキャッチと普通の catch は一緒に並べられるので、コンパイルできます。
ポイント
- マルチキャッチも普通の catch と同じく、上から順に調べられます。ClassCastException は2つ目の catch で処理されます。