1. 概要

この短い記事では、Javaエラーを適切にキャッチする方法を示し、それが意味をなさない場合について説明します。

JavaでのThrowableの詳細については、Javaでの例外処理に関する記事を参照してください。

2. エラーをキャッチ

Javaのjava.lang.Errorクラスはjava.lang.Exception を継承しないため、Errorを宣言する必要があります。基本クラス(またはキャプチャしたい特定の Error サブクラス)をcatchステートメントでキャッチします。

したがって、次のテストケースを実行すると、合格します。

@Test(expected = AssertionError.class)
public void whenError_thenIsNotCaughtByCatchException() {
    try {
        throw new AssertionError();
    } catch (Exception e) {
        Assert.fail(); // errors are not caught by catch exception
    }
}

ただし、次の単体テストでは、catchステートメントがエラーをキャッチすることを想定しています。

@Test
public void whenError_thenIsCaughtByCatchError() {
    try {
        throw new AssertionError();
    } catch (Error e) {
        // caught! -> test pass
    }
}

Java仮想マシンは、メモリ不足やスタックオーバーフローなど、回復できない重大な問題を示すエラーをスローすることに注意してください。

したがって、、エラーをキャッチする非常に非常に正当な理由が必要です!

3. 結論

この記事では、Javaでエラーをいつどのようにキャッチできるかを説明しました。 コード例は、GitHubプロジェクトにあります。