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");
}
}
在上面的代码中,我有一个简单的类和一个类级实例,我也有一个同名的本地实例。运行上面的代码时,我得到以下异常:
Exception in thread "main" java.lang.StackOverflowError
at com.java8.Cloning.<init>(Cloning.java:6)
答案 0 :(得分:23)
您的main方法会创建一个Cloning
实例(Cloning c=new Cloning();
),这会导致实例变量c
(Cloning c=new Cloning();
)的初始化,从而创建另一个Cloning
实例,等等......
你有一个无限的构造函数调用链,它会导致StackOverflowError
。
在上面的代码中,我有一个简单的类和一个类级实例
您没有班级实例。您有一个实例级实例。如果您需要类级实例,请更改
Cloning c=new Cloning();
到
static Cloning c=new Cloning();
答案 1 :(得分:7)
每次构造Cloning
时都会实例化类Cloning
,这会导致实例化的递归。
答案 2 :(得分:7)
你不打算在 static Cloning c = new Cloning();
,或 main
之外写<{1}} c = new Cloning();
而不是?
否则,每次运行时,您都会获得main
的新实例,这将导致c
。
目前,在StackOverflowError
(阴影字段c
)中创建本地Cloning c = new Cloning();
可以解决所有问题。