为什么我在构造函数中收到StackOverflowErrorexception
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:
Exception in thread "main" java.lang.StackOverflowError at com.java8.Cloning.(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
。
目前在Cloning c = new Cloning();
创建本地c
Cloning c = new Cloning();
( 阴影场c
)踢掉整个事情。