为什么下面的代码抛出异常(java.lang.StackOverflowError)?
public class Test {
Test f = new Test();
public static void main(String[] args) {
Test f = new Test();
System.out.println("Hi");
}
}
感谢。
答案 0 :(得分:6)
每个Test
对象都会创建一个Test
对象,该对象会创建一个Test
对象,令人作呕。
基本上,具有初始化表达式的实例字段f
会导致无限递归循环,在递归调用构造函数时会弹出堆栈。
答案 1 :(得分:0)
测试对象无限地互相引用。解决这个问题的方法是将main()放在类Test之外,并在类Test中删除Test的实例构造函数:
public class Test {
//some code here
}
public class RunTest {
public static void main(String[] args) {
Test f = new Test();
System.out.println("Hi");
}
}
此外,最好将没有main()的类命名为其他类,因为Test经常引用带有main()的类。
答案 2 :(得分:0)
答案在StackOverflowError JavaDoc中。
当由于应用程序过于冗长而发生堆栈溢出时抛出。
您无休止地创建Test对象。