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とは