递归中的StackOverflow错误



我是java的新手,我想了解当我在类和主程序中装入对象时,我在执行以下程序时在线程"main"java.lang.StackOverflowError中遇到此异常。有人能帮我理解为什么它是递归的吗?

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

那里没有构造函数。我认为以下是你想要的:

class Test {
  //constructor method
  Test() {
    System.out.println("Constructor method called.");
  }
  public static void main(String[] args) {
    Test t = new Test;  //creating object
  }
}

来源:http://www.programmingsimplified.com/java/tutorial/java-constructor-tutorial

堆栈溢出的原因是,每次实例化类时,它都会声明实例变量t,该变量被初始化为该类的另一个新实例,这会导致无限递归,因为每个新对象都会创建另一个对象,等等。

这里的问题是变量t

如果创建了一个新的Test-对象,则t会自动初始化为一个新Test-对象,该对象在创建时会再次创建一个新Test-对象。因此,对Test的构造函数的每次调用都会导致对Test的构造函数的另一次调用。直到堆栈溢出。

因为您在测试类中解密Test t = new Test();,所以删除顶部Test t = new Test();或更改变量,然后尝试运行它。

最新更新