Javaの検査例外のサンプルです。
目次
サンプル | 検査例外とは |
例外処理で使用するtry...catch構文 | |
検査例外+throws句あり | |
検査例外+throws句なし |
検査例外とは
ファイルの読み込み時にファイルがなかったりSQLでエラーが発生した等の例外です。
try-catchの記述が必須になります。
例外が発生すると例外のクラスからオブジェクトが生成されます。
検査例外のクラスは、Exceptionクラスとそのサブクラスで、RuntimeExceptionクラスとそのサブクラスではないものです。
- コンパイル時に例外処理の記述があるかチェックされ、ない場合はエラーになります。
- メソッドを呼ぶ側でtry-catchを行う場合、メソッドが呼ばれる側にthrows句の記述が必要です。
→ただしメソッドが呼ばれる側でtry-catchを行う場合は、throws句の記述は不要です。 - チェック例外(checked exception)とも呼ばれます。
- Errorクラスとその配下のクラスの例外の原因はシステムによるもので、回復不能のエラーと言われます。try-catchは必須では有りません。OutOfMemoryError等があります。
- Exceptionクラスとその配下のクラスの例外の原因はプログラムによるものです。
以下は、主な検査例外のクラスです。
クラス名(例外名) | 説明 |
---|---|
IOException | 入出力エラー |
FileNotFoundException | ファイルが見つからない |
SQLException | SQLエラー |
以下はJava8 API仕様のExceptionクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Exception.html
例外処理で使用するtry...catch構文
try { 実行する処理 } catch ( 例外のクラス 変数 ) { 実行する処理 } finally{ 実行する処理 } |
- 例外が起こる可能性がある箇所をtryブロックで囲みます。
- 例外が発生しcatchブロックの引数の例外のクラスの型と同じときにcatchブロックの処理が行われます。
- catchの引数の変数は、例外のクラスのインスタンスになります。
- catchは複数の記述できます。
- finallyブロックは例外のあるなしにかかわらず常に実行されます。
検査例外+throws句あり
メソッド throws 例外クラス |
検査例外でthorws句があるサンプルです。
メソッドを呼ぶ側でtry-catchを行う場合、メソッドが呼ばれる側にthrows句の記述が必要です。
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"));
}
}
12行目でFileTestクラスのreadメソッドを呼んでいます。
23行目にthrows句(throws IOException)を記述しています。
27行目で存在しないファイルを読みに行って検査例外(IOException)を発生させています。
13行目で検査例外(IOException)をキャッチしています。
eはIOExceptionクラスのインスタンスです。
検査例外+throws句なし
検査例外でthorws句がないサンプルです。
メソッドが呼ばれる側でtry-catchを行う場合は、throws句の記述は不要です。
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();
}
}
}
11行目でFileTestクラスのreadメソッドを呼んでいます。
21行目で存在しないファイルを読みに行って検査例外(IOException)を発生させています。
23行目で検査例外(IOException)をキャッチしています。eはIOExceptionクラスのインスタンスです。
16行目にはthrows句(throws IOException)はありません。
関連の記事
Java 非検査例外のサンプル
Java throw 作成した例外を投げる/例外を更に投げる
Java 独自の例外を作成するサンプル