繁体   English   中英

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

[英]Why does the java code below give StackOverflow error?

执行以下命令时出现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;
    }
}

这行:

StackOverflow7 obj = new StackOverflow7();

当您创建StackOverflow7的对象时, 总是会调用,这是您在此行本身中所做的。 因此,此行将递归调用自身,直到出现StackOverflow错误。

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

您可以通过调用StackOverflow7 localObj = new StackOverflow7();开始整个操作StackOverflow7 localObj = new StackOverflow7(); 在您的主要方法中。

要解决此问题,请将obj静态字段,或者将其全部删除,因为无论如何您都不会使用它。

由于这一行:

StackOverflow7 obj = new StackOverflow7();

每次创建新对象时,该行都会执行并尝试创建另一个对象

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM