有人可以帮助我理解为什么java试图在b之前创建一个实例。而且,为什么它在第2行和第3行之间循环?
public class Winterfell {
private Winterfell a= new Winterfell();
public Winterfell() throws Exception {
throw new Exception("Fire and Ice");
}
public static void main(String[] args) {
try {
Winterfell b = new Winterfell();
System.out.println("Surprise!");
} catch (Exception ex) {
System.out.println("I told you so");
}
}
}
答案 0 :(得分:3)
这将导致StackOverflowError
。
通过让一个字段引用同一个类的新对象,或者通过在构造函数中创建同一个类的新对象,您可以无限次地调用来创建一个新的Winterfell
对象。
这就是它循环的原因。
要解决此问题,您可能希望删除private Winterfell a= new Winterfell();
,以便创建单个Winterfell
对象。
答案 1 :(得分:2)
private Winterfell a= new Winterfell();
在调用Winterfell
的构造函数之前调用,因为它是数据成员。查看the Oracle documentation for object construction了解详情。