1. はじめに
例外とは?
Javaでプログラムを実行中にエラーが発生すると、「例外(Exception)」として通知されます。
例
- ファイルが見つからない
- 0で割った
- nullのオブジェクトにアクセスした
こうした 異常な状態を安全に処理するために使うのが「例外処理」です。
2. try-catch構文の基本
ブロック名 | 役割・用途 |
---|---|
try | 例外が発生する可能性がある処理を囲むブロック |
catch | 発生した例外を捕まえて処理(エラー対応)するブロック |
finally | 例外の有無に関わらず必ず実行される処理を書くブロック。主にリソースの解放などに使う |
try {
// 例外が発生するかもしれない処理
} catch (ExceptionType name) {
// 例外が発生したときの処理
}
3. 例外の種類
Checked Exception
例外処理を必ず明示的に書く必要がある。ファイル操作やネットワーク処理などでよく発生。
Unchecked Exception
RuntimeException(実行時例外)を継承した例外群。
主にプログラムのバグ(例:NullPointerException)で発生し、処理は任意。
分類 | 例 | 説明 |
---|---|---|
Checked | IOException |
try-catch必須 |
Unchecked | RuntimeException |
try-catchは任意 |
4. 複数のキャッチブロック
✅ 正しい順番
具体的な例外(子クラス)から書き、一般的な例外(親クラス)へと順に書く
理由
例外は上から順にチェックされるので、親クラスのcatchが先にあると、子クラスのcatchは決して実行されません。Javaコンパイラが「このcatchは意味がない」と判断してエラーにします。
try {
// ...
} catch (FileNotFoundException e) {
// ...
} catch (IOException e) {
// これは後に書かないとコンパイルエラー
}
5. try-catch と throws の使い分け
方法 | 意味 | 向いている場面 |
---|---|---|
try-catch |
その場で例外を捕まえて処理する | 例外に応じた対応がその場で可能なとき |
throws |
例外処理を呼び出し元に任せる | メソッド内で対処できない or 上位で処理したいとき |
6. ユーザー定義例外の書き方
定義
public class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
使い方
throw new MyException("カスタム例外です");
7. try-with-resources構文(Java 7以降)
-
リソース(ファイル、ネットワーク接続など)を使ったあとに必ず閉じる処理を簡単に書くための構文
-
finallyブロックでclose()を書かなくても、自動的に閉じてくれる
書き方
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
String line = br.readLine();
System.out.println(line);
} catch (IOException e) {
e.printStackTrace();
}
従来の書き方
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("file.txt"));
// 処理
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}