在Java中创建对象时出现异常

时间:2014-04-25 15:45:43

标签: java

为什么下面的代码抛出异常(java.lang.StackOverflowError)?

public class Test {
    Test f = new Test();


    public static void main(String[] args) {
        Test f = new Test();
        System.out.println("Hi");
    }
}

感谢。

3 个答案:

答案 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对象。