0

現在、Sierra & Bates レビュアーを使用して OCPJP 6 のレビューを行っています。StackOverflowError をスローしない無限ループに関する質問に出くわしました。私が学んだ限り、それは最終的にそれをスローするはずです。

質問については、この PDF を参照してください: https://java.net/downloads/jfjug/SCJP%20Sun%20Certified%20Programmer%20for%20Java%206-0071591060.pdf

私が参照している質問は、セルフテストの第 5 章の質問 9 (PDF の 455 ページ) からのものです。

私はCDFと答えました。本によると、正解はDFでした。ケース 0 は、StackOverflowError ではなく無限ループを開始することも説明されています。

確かに、無限ループを開始しますが、最終的には StackOverflowError になります。Cが「StackOverflowErrorをスローする可能性がある」と答えたので、Cが正しいことがわかりました。

私が間違っている場合、誰かが理由を説明できますか?

4

2 に答える 2

5

そのループでは、実際には他のメソッドを呼び出す必要があるメソッドを呼び出していないため (再帰)、スタックに呼び出しを追加していません。毎回最も多く行った手順を繰り返しているだけです。

aStackOverflowErrorは特定の条件でのみ呼び出されるため、つまり、別のメソッドの呼び出し (より多くのメソッドを呼び出す)、またはスタックへのより多くの要素の割り当てなど、この特定のループがそのようなエラーを引き起こす可能性は実際にはありません。

于 2014-02-08T17:41:29.003 に答える
1
The stack overflows is commonly :- excessively deep or infinite recursion.
In simple terms,for an example: calling a method within a method.

        public static void proneToStackOverFlow() {
         proneToStackOverFlow();
        }

        public static void main(String[] args) 
        {
            proneToStackOverFlow();
        }
于 2014-02-08T18:03:24.967 に答える