Java throw 作成した例外を投げる/上位に投げる

Javaの作成した例外を投げる/上位に投げるサンプルです。

目次

サンプル 作成した例外を投げる(throw)
  作成した例外に文字列を追加して投げる(throw)
  catchした例外を更に投げる(スローする)
補足 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)

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メソッドで設定した文字列を表示しています。

 

catchした例外を更に投げる(スローする)

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できるクラス

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

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

関連の記事

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

△上に戻る