非チェック例外は throws 不要
出力はどれか。
public class Main {
static void check(int n) {
if (n < 0) {
throw new IllegalArgumentException("negative");
}
}
public static void main(String[] args) {
try {
check(-1);
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
}
}
- A
negative - B
IllegalArgumentException - C コンパイルエラーになる
- D
-1
正解と解説を見る
正解: A
- A: check(-1) が IllegalArgumentException を投げ、catch で getMessage() のメッセージ negative を出力します。
- B: getMessage() は例外を作るときに渡したメッセージを返します。クラス名は含まれません。
- C: IllegalArgumentException は非チェック例外なので、throws を書かなくてもコンパイルできます。
- D: -1 は出力していません。出力しているのは例外のメッセージです。
ポイント
| 種類 | 例 | 処理の強制 |
|---|---|---|
| チェック例外 | Exception, IOException | あり |
| 非チェック例外 | RuntimeException とそのサブクラス | なし |
| エラー | Error (StackOverflowError など) | なし |
「例外処理の仕組みとチェック例外、非チェック例外、エラーの違い」をこのサイトで解く (記録・間違えた問題の解き直し・AI教師への質問)