【发布时间】:2014-05-02 17:30:21
【问题描述】:
public class Demo
{
static int i=0;
public static void main(String args[])
{
System.out.println("Hello"+(i++));
main(args);
}
}
在这个程序中,我使用实例变量调用 main。
它在某些时候可以正常运行,但在某些Hello 打印后它给出StackOverFlow 异常。
所以我输入 int 来查找它被打印了多少次。
我运行这个程序,它在i=4158 之后给出异常。
但我运行它几次它给出了不同值的异常我喜欢 4155,4124,4154 等。
据我所知,StackOverFlow 是由于错误或无条件递归调用而生成的。
我试图弄清楚,但不知道到底发生了什么。
我想知道为什么在4158(或其他值)之后?
它依赖于我的系统还是依赖于我的程序?
【问题讨论】:
-
没有。请。不要这样做。您没有足够的筹码来执行此操作。
-
你问为什么每次的数字都不一样?或者为什么会发生这种情况?
-
@Mokoto 好的,我不会 :) 但我只是想知道这背后的确切机制。
-
好的,不知道为什么每次的数字都不一样。至于它发生的原因,您可以对堆栈是什么以及它是如何填充的进行一些研究。也许从en.wikipedia.org/wiki/Call_stack开始