该程序为什么会给出此异常
"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();
}
}
答案 0 :(得分:1)
之所以会这样,是因为您将实例级变量初始化为自己定义的类的实例,从而导致无限递归并且JVM抛出了StackOverflowError
:
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();
}
}