【Java SE17 Silver 模擬試験】A-56

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が出力されます。

前の問題へ SE17_A-55

次の問題へ SE17_A-57


対象資格:Java SE17 認定資格