【发布时间】:2017-09-05 20:24:43
【问题描述】:
我在java中有一个无限递归循环
public void infiniteLoop(Long x){
System.out.println(""+x);
infiniteLoop(x + 1);
}
public static void main(String[] args) {
StackOverFlow st = new StackOverFlow();
st.infiniteLoop(0L);
}
在这段代码中,它按预期显示了一个 StackOverFlow 错误,但如果我查看控制台输出,该错误会显示在多行中:
4806
4807
4808
at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:129)
at java.io.PrintStream.write(PrintStream.java:526)
at java.io.PrintStream.print(PrintStream.java:669)
at java.io.PrintStream.println(PrintStream.java:806)
at stackoverflow.StackOverFlow.infiniteLoop(StackOverFlow.java:234809
)
at stackoverflow.StackOverFlow.infiniteLoop(StackOverFlow.java:24)
at stackoverflow.StackOverFlow.infiniteLoop(StackOverFlow.java:24)
4810
4811
4812
我的问题是,为什么会发生这种情况?它不应该在显示第一个 Stack Overflow 错误后立即停止吗?
【问题讨论】:
-
可能会缓冲
stdout,并在stderr到达后立即打印,然后在崩溃后刷新stdout。 -
这是因为错误写入
stderr,而输出写入stdout。这些可能不会很好地同步。
标签: java recursion netbeans stack stack-overflow