StackOverflowError
Javaでa が発生した後でも実行を継続できることに驚いています。
私はそれStackOverflowError
がクラスErrorのサブクラスであることを知っています。Errorクラスは、「合理的なアプリケーションがキャッチしようとしてはならない深刻な問題を示すThrowableのサブクラス」としてデクリメントされています。
StackOverflowErrorのようなエラーをキャッチすることは実際には許可されており、それを行わないことはプログラマーの判断に委ねられているため、これは規則よりも推奨事項のように聞こえます。そして、このコードをテストしたところ、正常に終了しました。
public class Test
{
public static void main(String[] args)
{
try {
foo();
} catch (StackOverflowError e) {
bar();
}
System.out.println("normal termination");
}
private static void foo() {
System.out.println("foo");
foo();
}
private static void bar() {
System.out.println("bar");
}
}
どうすればいいの?StackOverflowErrorがスローされる頃には、スタックがいっぱいになっていて、別の関数を呼び出す余地がないと思います。エラー処理ブロックは別のスタックで実行されていますか、またはここで何が起こっていますか?