Java 非検査例外のサンプル

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

非検査例外とは

  • 非チェック例外 (unchecked exception)とも呼ばれます。
  • RuntimeExceptionクラスとその配下の例外クラスのことです。
    非検査例外
  • try-catchがなくてもコンパイルエラーになりません。
  • try-catchがない状態で非検査例外が発生した場合、例外は呼び出し元に投げられます。
  • 例外が拾われずに呼び出し元に投げられ続け、mainで終わった場合は落ちます。
  • 以下はJava8 API仕様のRuntimeExceptionクラスのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/lang/RuntimeException.html

主な非検査例外

以下は、主な非検査例外です。

クラス名(例外名) 説明
NullPointerException nullポインタへのアクセス
ArrayIndexOutOfBoundsException 配列の添字の不正
IllegalArgumentException 引数の値のエラー
ArithmeticException 0による除算

コード

非検査例外のサンプルコードです。
10行目で非検査例外(ArithmeticException)を発生させています。
18行目からtry-catchを記述しています。 22行目で例外をキャッチしています。

package test1;

/**
 * 非検査例外のサンプル
 */
class Sample {
	void runSample() {
		// 0による除算のためArithmeticExceptionの例外が発生
		int i = 0;
		i = 10 / 0; 
	}
}
public class Test1 {
	public static void main(String[] args) {
		Sample s = new Sample();
		
		// try-catchを行っている(メソッドを呼ぶ側)
		try {
			s.runSample();

		// 例外をキャッチ
		} catch (ArithmeticException e) {
			System.out.println(e); 
			//java.lang.ArithmeticException: / by zero

		} catch (Exception e) {
			System.out.println("Exception"); //出力されない
			
		// finallyは例外があってもなくても実行される
		}finally {
			System.out.println("finallyの実行"); //finallyの実行
		}
	}
}

try-catchがない場合

try-catchがないため、呼び出し元に例外が投げ続けられるコードです。
11行目で非検査例外(ArithmeticException)を発生させています。
17行目では、try-catchがないので例外はさらに呼び出し元に投げられます。
26行目はメソッドの呼び出し元です。
28行目で例外をキャッチします。

package test1;

/**
 * 非検査例外 try-catchがないので呼び出し元に例外が投げられるサンプル
 */
class FileTest {
	static void calc() {
		int i;
		// 0による除算のためArithmeticExceptionの例外が発生
		// try-catchがないため呼び出し元に例外が投げられる
		i = 10/0;
	}
}
class Sample {
	void runSample(){
		// try-catchがないので例外はさらに呼び出し元に投げられる
		FileTest.calc();
	}
}
public class Test1 {
	public static void main(String[] args) {
		Sample s = new Sample();

		try{
			// メソッドの呼び出し元
			s.runSample();			
		// 例外をキャッチ
		} catch (ArithmeticException e) {
			System.out.println(e);
			//java.lang.ArithmeticException: / by zero
		} catch (Exception e) {
			System.out.println("Exception"); //出力されない
		}
 	}
}

関連の記事

Java 検査例外のサンプル
Java 例外処理のthrowのサンプル
Java 独自の例外を作成するサンプル
Java printStackTraceとは
Java try-with-resources構文のサンプル




△上に戻る