問題
次のコード断片をコンパイル、実行するとどうなりますか。
try {
String duke = null;
if (duke.equalsIgnoreCase("ng")) {
throw new IllegalStateException("NG");
}
} catch (IllegalStateException e) {
System.out.print("catch 1 ");
} catch (RuntimeException e) {
System.out.print("catch 2 ");
} catch (Exception e) {
System.out.print("catch 3");
}
選択肢
A)catch1 catch2 catch3 が出力される
B)catch2 が出力される
C)catch1 catch2 が出力される
D)catch ブロックでキャッチできない例外がスローされる
E)catch1 が出力される
F)catch3 が出力される
解答
A)catch1 catch2 catch3 が出力される
B)catch2 が出力される
C)catch1 catch2 が出力される
D)catch ブロックでキャッチできない例外がスローされる
E)catch1 が出力される
F)catch3 が出力される
解説
このコード断片では、duke
という文字列変数が null
に初期化されています。
String duke = null;
if (duke.equalsIgnoreCase("ng")) {
throw new IllegalStateException("NG");
}
ここで duke.equalsIgnoreCase("ng")
を実行しようとすると、duke
が null
であるため、NullPointerException
がスローされます。equalsIgnoreCase
メソッドを呼び出す前に、duke
が null
であるため、実行時エラーが発生します。
この例外は、NullPointerException
であり、以下の catch
ブロックのいずれでも処理されません。
catch (IllegalStateException e)
: キャッチしないcatch (RuntimeException e)
: キャッチしないcatch (Exception e)
: キャッチしない
結論
したがって、コードは NullPointerException
をスローし、キャッチされないため、実行時エラーが発生します。正しい選択肢は D)catch ブロックでキャッチできない例外がスローされる です。
対象資格:Java SE17 認定資格