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プロジェクトにあります。