为什么这个程序会产生堆栈溢出错误?

时间:2017-03-20 04:10:21

标签: java

public class Test {
  Test t = new Test();
  public static void main(String[] args) {
    Test t1 = new Test();
  }
}

3 个答案:

答案 0 :(得分:4)

您的代码没有构造函数,这就是编译器所做的 -

public class Test {
  Test t; // <-- initializer copied to every constructor body, even the default.
  public Test() { // <-- compiler adds default constructor,
    super();
    t = new Test(); //<-- infinite recursion.
  }
  public static void main(String[] args) {
    Test t1 = new Test(); // <-- invokes default constructor
  }
}

答案 1 :(得分:2)

这是因为每当创建Test的新对象时,它将再次创建一个对象t,同时将再次初始化......并继续

public class Test {
    Test t = new Test(); //-> recursive instantiation
    public static void main(String[] args) {
        Test t1 = new Test();
    }
}

尝试删除Test t = new Test();或将其设为静态static Test t = new Test();,它应该可以解决您的问题。

public class Test {
    static Test t = new Test(); //or remove it
    public static void main(String[] args) {
        Test t1 = new Test();
    }
}

答案 2 :(得分:1)

因为这一行:

Test t = new Test();

将生成无限的递归实例化。