1

Javaで再帰を実行しようとしています。再帰を停止して、通常のプログラムの実行を続行したいだけです

void doit(){
    try{
        doit();
    }
    catch (StackOverflowError e) {
        return;
    }
    System.out.println("Error");
}


statement1
doit()
statementcontinue

statementcontinuestackoverflow エラーが発生した後もプログラムを実行し続けたい

4

3 に答える 3

3

あなたのプログラムは、あなたが指示したことを正確に実行しています。

を呼び出すたびに、次のようdoit()になります。

  1. doit()再度コール
  2. それが終わったら、それは印刷しErrorます。

スタック オーバーフローが発生すると、最も内側の呼び出しが終了し ( が原因でreturn)、それを呼び出した関数の実行が続行されます (他の関数呼び出しと同様)。
これは、コール スタックのポップと呼ばれます。

呼び出し元の関数 (これもdoit()) は、次の行 ( ) を実行し、呼び出し元の関数 (これも)System.out.println("Error");に戻ります。 このサイクルは、スタックが完全にポップされるまで、つまり最初に呼び出された関数に到達するまで繰り返されます。doit()
doit()

于 2013-04-18T19:32:10.103 に答える