我正在使用Sierra& amp ;;正在审查我的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是正确的。
如果我错了,有人可以解释原因吗?
答案 0 :(得分:5)
因为在那个循环中,你实际上并没有调用需要调用其他方法的方法(一个递归),所以你不会向堆栈添加更多的调用。你只是重复你每次都做得最多的步骤。
由于a StackOverflowError
仅在某些条件下被调用 - 即调用另一个方法(可以调用更多方法),或者将更多元素分配到堆栈上,所以这个特定的循环真的没办法可能会导致这样的错误。
答案 1 :(得分: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();
}