有人可以帮我理解为什么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/

10-10 15:57