Javaの非検査例外のサンプルです。
目次
非検査例外とは
- 非チェック例外 (unchecked exception)とも呼ばれます。
- RuntimeExceptionクラスとその配下の例外クラスのことです。(下図の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による除算 |
非検査例外のサンプルコード(try-catchあり)
非検査例外のサンプルコードです。
7行目からtry-catchを記述しています。
26行目で0による除算のため非検査例外(ArithmeticException)を発生させています。
11行目で例外をキャッチしています。
package test1;
public class Test1 {
public static void main(String[] args) {
// メソッドを呼ぶ側
try {
Sample.runSample();
// 例外をキャッチ
} catch (ArithmeticException e) {
System.out.println(e);
//java.lang.ArithmeticException: / by zero
}finally {
System.out.println("finallyの実行");
}
}
}
class Sample {
// メソッドが呼ばれる側
static void runSample() {
// 0による除算のためArithmeticExceptionの例外が発生
int i = 0;
i = 10 / 0;
}
}
非検査例外のサンプルコード(try-catchなし)
try-catchがないため、呼び出し元に例外が投げ続けられるコードです。
9行目は、18行目のメソッドを呼び出しています。
20行目は、25行目のメソッドを呼び出しています。
29行目で0による除算のため非検査例外(ArithmeticException)を発生します。
try-catchがないため呼び出し元の20行目に例外が投げられます。
20行目でもtry-catchがないため呼び出し元の9行目に例外が投げられます。
11行目で例外がキャッチされます。
package test1;
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
}
}
}
class Sample {
void runSample(){
FileTest.calc();
// try-catchがないので例外はさらに呼び出し元に投げられる
}
}
class FileTest {
static void calc() {
// try-catchがないため呼び出し元に例外が投げられる
int i;
i = 10/0;
}
}
関連の記事
Java 検査例外のサンプル(チェック例外)
Java 例外処理のthrowのサンプル
Java 独自の例外を作成するサンプル
Java printStackTraceとは
Java リソースを自動でクローズする(try-with-resources文)