为什么下面的java代码会给出StackOverflow错误?

时间:2016-07-08 12:15:55

标签: java runtime-error stack-overflow

执行以下操作时出现StackOverflow错误:

public class StackOverflow7 {
    StackOverflow7 obj = new StackOverflow7();
    int finalCount = 0;
    public static void main(String[] args) {
        for(int i = 1 ; i <= 5 ; i++)
        System.out.println(i);

        StackOverflow7 localObj = new StackOverflow7();
        localObj.count(88);
        System.out.println("Final Count :: " + localObj.finalCount);
    }

    private void count(int num){
        finalCount = finalCount + num;
    }
}

3 个答案:

答案 0 :(得分:4)

这一行:

StackOverflow7 obj = new StackOverflow7();
当您创建StackOverflow7的对象时,

始终,您正在此行中进行此操作。因此,这行以递归方式调用自身,直到出现StackOverflow错误。

答案 1 :(得分:1)

由于以下行而导致堆栈溢出:StackOverflow7 obj = new StackOverflow7();。无论何时创建新实例,都会调用它,因此您可以创建新实例并创建新实例,依此类推。因此,在堆栈跟踪中,您应该看到很多<clinit>行。

您可以通过在主方法中调用StackOverflow7 localObj = new StackOverflow7();来启动整个事情。

要解决此问题,请将obj设为静态字段,或将其完全删除,因为您仍然没有使用它。

答案 2 :(得分:0)

由于这一行:

StackOverflow7 obj = new StackOverflow7();

每次创建新对象时,此行都会执行并尝试创建其他对象