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

Why does the java code below give StackOverflow error?

我在执行以下命令时遇到 Whosebug 错误:

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

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

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

这一行:

Whosebug7 obj = new Whosebug7();
当您创建 Whosebug7 的对象时, 总是 调用

,您正在这一行本身中执行此操作。因此,这一行递归地调用自身,直到出现 Whosebug 错误。

由于这一行,您得到堆栈溢出:Whosebug7 obj = new Whosebug7();。每当您创建一个新实例时,它都会被调用,因此您创建了一个新实例并创建了一个新实例等等。因此,在您的堆栈跟踪中,您应该看到很多 <clinit> 行。

您可以通过在主方法中调用 Whosebug7 localObj = new Whosebug7(); 来开始整个过程​​。

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

因为这一行:

Whosebug7 obj = new Whosebug7();

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