为什么我的构造函数中出现 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();
),这会导致初始化实例变量c
(Cloning 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();
中创建本地 c
(shadows 字段 c
)开始了整个过程。
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();
),这会导致初始化实例变量c
(Cloning 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();
中创建本地 c
(shadows 字段 c
)开始了整个过程。