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)
你的main方法创建了一个Cloning
实例(Cloning c=new Cloning();
),它导致实例变量c
(Cloning c=new Cloning();
)的初始化,这会创建另一个Cloning
实例,依此类推......
你有一个无限的构造函数调用链,它导致StackOverflowError
。
在上面的代码中,我有一个简单的类和一个类级实例
您没有类级别实例。您有一个实例级实例。如果需要类级实例,请更改
Cloning c=new Cloning();
至
static Cloning c=new Cloning();
每次构造Cloning
时都会实例化类Cloning
,这会导致实例化的递归。
你是不是想在static Cloning c = new Cloning();
之外写main
,或者在c = new Cloning();
内写main
?
否则,每次运行时你都会得到一个c
的新实例,这将导致StackOverflowError
。
目前在c
(阴影场Cloning c = new Cloning();
)创建的本地c
踢掉了整个事情。