为什么我的构造函数中出现 StackOverflowError 异常

Why am I getting a StackOverflowError exception in my constructor

public class Cloning {

    Cloning c=new Cloning();
    public static void main(String[] args) {

        Cloning c=new Cloning();
        c.print();
    }

    public void print(){
        System.out.println("I am in print");
    }

}

在上面的代码中,我有一个简单的 class 和一个 class 关卡实例,我还有一个同名的本地实例。当 运行 上面的代码出现以下异常时:

Exception in thread "main" java.lang.WhosebugError
    at com.java8.Cloning.<init>(Cloning.java:6)

你的main方法创建了一个Cloning实例(Cloning c=new Cloning();),这会导致初始化实例变量cCloning c=new Cloning();),这会创建另一个Cloning实例,依此类推...

您有无限的构造函数调用链,导致 WhosebugError

In the above code I have a simple class and a class level instance

您没有 class 关卡实例。您有一个实例级实例。如果你想要一个class级别的实例,更改

Cloning c=new Cloning();

static Cloning c=new Cloning();

每次构造 Cloning 时都会实例化 class Cloning,这会导致实例化递归。

你不是想写static Cloning c = new Cloning(); 外面 main, c = new Cloning(); main 之内?

否则,每次 运行 时都会得到一个 c 的新实例,这将导致 WhosebugError.

目前在 Cloning c = new Cloning(); 中创建本地 cshadows 字段 c)开始了整个过程。