Java 例外処理のサンプル(検査例外)

Javaの例外処理の検査例外のサンプルです。

目次

説明 例外処理で使用するtry...catch構文
  検査例外とは
サンプル 検査例外+throws句あり
  検査例外+throws句なし

例外処理で使用するtry...catch構文

try {
   実行する処理
catch ( 例外のクラス 変数 ) {
   実行する処理
finally{
 実行する処理
}
  • 例外が起こる可能性がある箇所をtryブロックで囲みます。
  • 例外が発生しcatchブロックの引数の例外のクラスの型と同じときにcatchブロックの処理が行われます。
  • catchの引数の変数は、例外のクラスのインスタンスになります。
  • catchは複数の記述できます。
  • finallyブロックは例外のあるなしにかかわらず常に実行されます。

検査例外とは

テキストファイルの読み込みやSQLでデータを取得する際など、エラーが発生することを想定すべき例外のことで、try-catchの記述が必須になります。

クラスでいうとExceptionクラスとそのサブクラスで、RuntimeExceptionクラスとそのサブクラスではないものです。

  • コンパイル時に例外処理の記述があるかチェックされ、ない場合はエラーになります。
  • メソッドを呼ぶ側でtry-catchを行う場合、メソッドが呼ばれる側にthrows句の記述が必要です。
    →ただしメソッドが呼ばれる側でtry-catchを行う場合は、throws句の記述は不要です。
  • チェック例外(checked exception)とも呼ばれます。
  • Errorクラスの配下の例外では、OutOfMemoryError等があります。回復不能のエラーと言われます。try-catchは必須では有りません。
  • RuntimeExceptionクラス配下の例外では、NullPointerException等があります。try-catchは必須ではありません。非検査例外と呼ばれます。

以下は、主な検査例外のクラスです。

クラス名(例外名) 説明
IOException 入出力エラー
FileNotFoundException ファイルが見つからない
SQLException SQLエラー

以下はJava8 API仕様のExceptionクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Exception.html 

検査例外+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 独自の例外を作成するサンプル

△上に戻る