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

因为,在那个循环中,您实际上并没有调用需要调用其他方法的方法(一个 la 递归),所以您没有向堆栈添加更多调用。您只是在重复每次执行次数最多的步骤。

由于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 回答