【Java SE17 Silver 模擬試験】B-12

Java SE17 Silver 模擬試験
Java SE17 Silver 模擬試験

問題

次のコード断片をコンパイル、実行するとどうなりますか。

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") を実行しようとすると、dukenull であるため、NullPointerException がスローされます。equalsIgnoreCase メソッドを呼び出す前に、dukenull であるため、実行時エラーが発生します。

この例外は、NullPointerException であり、以下の catch ブロックのいずれでも処理されません。

  • catch (IllegalStateException e): キャッチしない
  • catch (RuntimeException e): キャッチしない
  • catch (Exception e): キャッチしない

結論

したがって、コードは NullPointerException をスローし、キャッチされないため、実行時エラーが発生します。正しい選択肢は D)catch ブロックでキャッチできない例外がスローされる です。

前の問題へ SE17_B-11

次の問題へ SE17_B-13

対象資格:Java SE17 認定資格