原因の例外を持たせる
出力はどれか。
public class Main {
public static void main(String[] args) {
try {
try {
int x = 1 / 0;
} catch (ArithmeticException e) {
throw new CalcException("計算失敗", e);
}
} catch (CalcException e) {
System.out.println(e.getMessage() + " / " + e.getCause().getClass().getSimpleName());
}
}
}
class CalcException extends RuntimeException {
CalcException(String message, Throwable cause) {
super(message, cause);
}
}
- A
計算失敗 / ArithmeticException - B
計算失敗 / CalcException - C
/ by zero / ArithmeticException - D コンパイルエラーになる
正解と解説を見る
正解: A
- A: getMessage() は CalcException のメッセージ、getCause() は元の ArithmeticException なので、計算失敗 / ArithmeticException です。
- B: getCause() は原因として渡した例外 (ArithmeticException) を返すので、CalcException ではありません。
- C: getMessage() は CalcException 自身のメッセージ (計算失敗) を返します。/ by zero は原因の例外のメッセージです。
- D: super(message, cause) は RuntimeException のコンストラクタにあるので、コンパイルできます。
ポイント
- 元の例外を「原因 (cause)」として持たせると、getCause() で取り出せます。