Javaの検査例外のサンプルです。
目次
検査例外とは
- チェック例外(checked exception)とも呼ばれます。
- Exceptionクラスとそのサブクラスで、RuntimeExceptionクラスとそのサブクラスではないものです。(下図のExceptionクラスと黄色の部分)

- 例外処理の記述(try-catch)が必須です。
- コンパイル時に例外処理の記述があるかチェックされます。
- メソッドを呼ぶ側でtry-catchを行う場合、メソッドが呼ばれる側にthrows句の記述が必要です。
→非検査例外ではthrows句は必要ではありません。
検査例外のサンプルコード(throws句の記述あり) - ただしメソッドが呼ばれる側でtry-catchを行う場合は、throws句の記述は不要です。
検査例外のサンプルコード(throws句の記述なし) - 以下はJava8 API仕様のExceptionクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Exception.html
主な検査例外
以下は、主な検査例外です。
| クラス名(例外名) | 説明 |
|---|---|
| IOException | 入出力エラー |
| FileNotFoundException | ファイルが見つからない |
| SQLException | SQLエラー |
検査例外のサンプルコード(throws句の記述あり)
検査例外のサンプルコードです。thorws句の記述があります。
メソッドを呼ぶ側でtry-catchを行う場合、メソッドが呼ばれる側にthrows句の記述が必要です。
13行目からtry-catchを記述しています。
14行目でFileTestクラスのreadメソッドを呼んでいます。
29行目にthrows句(throws IOException)を記述しています。
35行目で存在しないファイルを読みに行って検査例外(IOException)を発生させています。
17行目で検査例外(IOException)をキャッチしています。
package test1;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
// メソッドを呼ぶ側
try {
FileTest.read();
// 例外をキャッチ
} catch (IOException e) {
System.out.println(e);
//java.nio.file.NoSuchFileException: D:\workspace\test2.txt
}finally {
System.out.println("finallyの実行");
}
}
}
class FileTest {
// メソッドが呼ばれる側
static void read() throws IOException {//throws IOExceptionを書く
String dir = "D:\\workspace";
String filename = "test2.txt";
// 存在しないファイルを読みに行って例外(IOException)が発生
List<String> line = Files.readAllLines(Paths.get(dir, filename),
Charset.forName("SHIFT_JIS"));
}
}
検査例外のサンプルコード(throws句の記述なし)
検査例外のサンプルコードです。thorws句の記述がないパターンです。
メソッドが呼ばれる側でtry-catchを行う場合は、throws句の記述は不要です。
13行目でFileTestクラスのreadメソッドを呼んでいます。
26行目で存在しないファイルを読みに行って検査例外(IOException)を発生させています。
29行目で検査例外(IOException)をキャッチしています。
19行目にはthrows句(throws IOException)はありません。
package test1;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
// メソッドを呼ぶ側
FileTest.read();
}
}
class FileTest {
// メソッドが呼ばれる側
static void read() {
String dir = "D:\\workspace";
String filename = "test2.txt";
// 存在しないファイルを読みに行って例外(IOException)が発生
try {
List<String> line = Files.readAllLines(Paths.get(dir, filename),
Charset.forName("SHIFT_JIS"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
関連の記事
Java 非検査例外のサンプル(非チェック例外)
Java 例外処理のthrowのサンプル
Java 独自の例外を作成するサンプル
Java printStackTraceとは
Java リソースを自動でクローズする(try-with-resources文)