問題
次の例外クラスを確認してください。
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が出力されます。
対象資格:Java SE17 認定資格