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

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

問題

次の例外クラスを確認してください。

class MyException extends RuntimeException {}
class MySubExceptionA extends MyException {}
class MySubExceptionB extends MyException {}

次のコード断片をコンパイル、実行するとどうなりますか。
なお、変数 value には有効な正の整数値が格納されるものとします。

public class Main {
	public static void main(String... args) {
		try {
			if (value % 2 == 0)
				throw new MySubExceptionA();
			else
				throw new MySubExceptionB();
		} catch (MySubExceptionA | MySubExceptionB e) {
			System.out.print("A ");
		} catch (MyException e) {
			System.out.print("B ");
		} catch (RuntimeException e) {
			System.out.print("C ");
		} catch (Exception e) {
			System.out.print("D ");

		} finally {
			System.out.print("E ");
		}
	}
}

選択肢

A)A E が出力される

B)何も出力されない

C)E が出力される

D)コンパイルエラーになる

E)A が出力される

F)B が出力される

G)B E が出力される

解答

A)A E が出力される

B)何も出力されない

C)E が出力される

D)コンパイルエラーになる

E)A が出力される

F)B が出力される

G)B E が出力される

解説

try文内のif文はtrueの場合:MySubExceptionAの例外クラスへスロー、falseの場合:MySubExceptionBの例外クラスへスローするようになっており、catch文にははじめ MySubExceptionA | MySubExceptionB e と記述されています。
trueまたはfalseどちらの結果でも catch (MySubExceptionA | MySubExceptionB e) でキャッチすることとなっているため、Aが出力されます。
その後、finallyは必ず実行されるため、Eが出力されます。

  1. 条件の評価:
    • value には有効な正の整数値が格納されているため、value % 2 == 0true であれば MySubExceptionA がスローされ、false であれば MySubExceptionB がスローされます。
  2. 例外処理:
    • スローされた例外は catch ブロックで捕捉されます。
    • MySubExceptionA または MySubExceptionB がスローされた場合、最初の catch ブロックである catch (MySubExceptionA | MySubExceptionB e) が実行され、System.out.print("A "); により “A ” が出力されます。
  3. finally ブロック:
    • finally ブロックは例外がスローされても、正常に処理が終わっても必ず実行されます。この場合、System.out.print("E "); が実行されます。
  4. 出力:
    • したがって、最終的な出力は “A E ” になります。

他の選択肢についても考慮すると:

  • B)何も出力されない: 不正解です。出力があります。
  • C)E が出力される: 不正解です。E の前に A があります。
  • D)コンパイルエラーになる: 不正解です。コンパイルエラーは発生しません。
  • E)A が出力される: 不正解です。E も出力されます。
  • F)B が出力される: 不正解です。B は出力されません。
  • G)B E が出力される: 不正解です。B は出力されません。

したがって、正しい選択肢は A)A E が出力される です。

前の問題へ SE17_B-54

次の問題へ SE17_B-56

対象資格:Java SE17 認定資格