有人可以帮我理解为什么Java试图在b之前创建a的实例。而且,为什么它在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");
}
}
}
最佳答案
这将导致StackOverflowError
。
通过使字段引用相同类的新对象,或通过在构造函数中创建相同类的新对象,您将无数次调用来创建新的Winterfell
对象。
这就是循环的原因。
要解决此问题,您可能希望删除private Winterfell a= new Winterfell();
,以便创建单个Winterfell
对象。
关于java - Java追踪困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35229260/