マルチキャッチ
出力はどれか。
public class Main {
public static void main(String[] args) {
String s = args.length > 0 ? args[0] : null;
try {
System.out.println(s.length());
} catch (NullPointerException | IllegalArgumentException e) {
System.out.println("caught " + e.getClass().getSimpleName());
}
}
}
- A
caught NullPointerException - B
caught IllegalArgumentException - C 実行時に例外が発生する
- D コンパイルエラーになる
正解と解説を見る
正解: A
- A: 引数がないので s は null で、s.length() で NullPointerException が発生し、マルチキャッチで捕まります。
- B: 発生したのは NullPointerException です。getClass() は実際に発生した例外の型を返します。
- C: マルチキャッチに NullPointerException が含まれているので、例外は捕まって正常に終わります。
- D: NullPointerException と IllegalArgumentException は親子関係がないので、マルチキャッチに並べられます。
ポイント
catch (A | B e)で複数の例外を1つの catch で処理できます。