程序的流程是什么,为什么是stackOverFlow错误

时间:2019-08-14 10:46:03

标签: java

该程序为什么会给出此异常

"Exception in thread "main" java.lang.StackOverflowError at com.Test.<init>(Test.java:5)"

代码:

public class Test {

    Test t  = new Test();

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

3 个答案:

答案 0 :(得分:1)

之所以会这样,是因为您将实例级变量初始化为自己定义的类的实例,从而导致无限递归并且JVM抛出了StackOverflowError

  • main方法中Test的新实例创建Test,该实例将Test初始化为实例级别变量,该实例级变量创建Test,其初始化Test作为实例级变量等...

要解决此问题,请删除该类中代码的第一行并使用以下命令:

public class Test {

    public static void main(String[] args) {    // this static method is called once upon 
        Test t  = new Test();                   // the start and creates an instance once
    }
}

答案 1 :(得分:0)

每个类实例(无休止地)调用新的类实例,并因此调用StackOverflowError

只需从类中删除未使用的字段即可:

public class Test {   

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

答案 2 :(得分:0)

StackOverFlowError即将到来,因为您正在创建与实例级别变量相同的类对象。因此,无论何时创建此类的实例,它都会在内部创建Test类的实例(因为您已将其定义为实例级别变量),因此,它将再次创建Test类的实例,依此类推。 >

因此,您将必须删除实例级对象的创建,如下所示:-

public class Test {

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