Java throw 例外処理をスローするサンプル

Javaの例外処理をスローするサンプルです。

目次

throw 例外クラスをインスタンス化し、その例外をスローする
  例外をスローする
  throw+独自のエラーメッセージを表示する
補足 throwできるクラス

例外クラスをインスタンス化し、その例外をスローする

throw new 例外クラス名()
  • 任意の場所で任意の例外を発生させることができます。
  • スローした例外はcatchで捕まえます。
  • throw(スロー)は投げるという意味です。

例外クラスをインスタンス化し、その例外をスローするサンプルです。

package test1;

public class Test1 {
	public static void main(String[] args) {
		try{
			Sample.runSample();
		// 例外をキャッチ
		}catch (NullPointerException e) {
			System.out.println(e); //java.lang.NullPointerException
		}
 	}
}
class Sample  {
	static void runSample(){
		int i = 5;
		if (i == 5) {
			// throwで、例外(NullPointerException)を発生させる
			throw new NullPointerException(); 
		}
	}
}

18行目は、NullPointerExceptionクラスをインスタンス化しスローしています。
※ここではNullPointerの例外が起きる要素はありませんが、throwで無理やり発生させています。

8行目は、catchでNullPointerの例外を捕まえています。

以下は、OracleのNullPointerExceptionクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/NullPointerException.html

例外をスローする

throw 例外インスタンス
  • スローした例外はcatchで捕まえます。
  • throw(スロー)は投げるという意味です。

例外をスローするサンプルです。

package test1;

public class Test1 {
	public static void main(String[] args) {
		try{
			Sample.runSample();
		// 例外をキャッチ
		}catch (ArithmeticException e) {
			System.out.println("エラー2"); // エラー2
		}
		System.out.println("終了です"); // 終了です
 	}
}
class Sample  {
	static void runSample() {
		try {
			int i = 6/0;
		}
		catch(ArithmeticException e){
			System.out.println("エラー1"); // エラー1
			throw e; // 例外をスローする
		}
	}
}

17行目は、0で割っているのでArithmeticExceptionの例外が発生します。
19行目は、ArithmeticExceptionの例外をキャッチします。
21行目は、throw eで例外のインスタンスをスローしています。
8行目は、21行目でスローされた例外をキャッチしています。
出力される文字は、「エラー1」、「エラー2」、「終了です」です。

21行目のthrowをコメントにした場合は、8行目のcatchブロックに入ってきません。
出力される文字は、「エラー1」、「終了です」です。

throw+独自のエラーメッセージを表示する

public NullPointerException(String s)
public String getMessage()

例外クラスのコンストラクタの引数に文字列をセットすると、getMessageメソッドで設定した文字列を取得できます。

package test1;

public class Test1 {
	public static void main(String[] args) {
		try{
			Sample.runSample();
		}catch (NullPointerException e) {
			System.out.println(e.getMessage());//エラーです
			System.out.println(e);//java.lang.NullPointerException: エラーです
		}
 	}
}
class Sample  {
	static void runSample(){
		int i = 5;
		if (i == 5) {
			// throwで、例外を発生+メッセージ
			throw new NullPointerException("エラーです"); 
		}
	}
}

18行目は、コンストラクタの引数に文字列をセットしています。
8行目は、getMessageメソッドで設定した文字列を表示しています。

throwできるクラス

throwするクラスはThrowableクラスの子クラスである必要があります。
Throwableクラスは、すべての例外クラスの親クラスです。

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

関連の記事

Java 例外処理のサンプル(検査例外)
Java 例外処理のサンプル(非検査例外)
Java 独自の例外を作成するサンプル
Java printStackTraceとは

△上に戻る