チェック例外を宣言して投げる
出力はどれか。
public class Main {
static void order(int n) throws OrderException {
if (n == 0) {
throw new OrderException();
}
}
public static void main(String[] args) {
try {
order(0);
} catch (OrderException e) {
System.out.println("caught " + e.getMessage());
}
}
}
class OrderException extends Exception {
}
- A
caught null - B
caught - C
caught OrderException - D コンパイルエラーになる
正解と解説を見る
正解: A
- A: メッセージを渡さずに作った例外の getMessage() は null なので、caught null です。
- B: 文字列連結で null は "null" と表示されるので、caught だけにはなりません。
- C: getMessage() はクラス名ではなくメッセージを返します。メッセージは設定していないので null です。
- D: throws OrderException を宣言し、呼び出し側で catch しているのでコンパイルできます。
ポイント
- メッセージを渡さずに作った例外の getMessage() は null です。