RuntimeException を継承した例外
出力はどれか。
public class Main {
public static void main(String[] args) {
try {
throw new StockException("在庫なし");
} catch (StockException e) {
System.out.println(e.getMessage() + " / " + e);
}
}
}
class StockException extends RuntimeException {
StockException(String message) {
super(message);
}
}
- A
在庫なし / StockException: 在庫なし - B
在庫なし / 在庫なし - C
null / StockException - D コンパイルエラーになる
正解と解説を見る
正解: A
- A: getMessage() はメッセージだけ、e (toString()) は「クラス名: メッセージ」になります。
- B: e を文字列にすると toString() が呼ばれ、クラス名の StockException: が先頭に付きます。
- C: super(message) でメッセージを渡しているので、getMessage() は null ではありません。
- D: RuntimeException を継承した独自例外は、throws なしで投げられるのでコンパイルできます。
ポイント
super(message)で親のコンストラクタにメッセージを渡すと、getMessage() で取り出せます。- 例外の toString() は「クラス名: メッセージ」です。