我是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();
或更改变量,然后尝试运行它。