我有一个班级测验。当我运行程序时,它会引发Stackoverflow错误。
班级:
public class Test {
private Test test = new Test();
public Test() {
System.out.println("ijshfiksh");
}
public static void main(String[] args) {
Test test = new Test();
}
}
错误
Exception in thread "main" java.lang.StackOverflowError
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
谁能告诉我为什么会这样?
答案 0 :(得分:2)
从这里您可以看到:
public class Test {
private Test test = new Test();
...
}
您要在Test
内创建Test
的实例:要构建该Test
实例,您必须构建另一个Test
实例,这也需要一个实例Test
,依此类推
答案 1 :(得分:2)
创建新的Test
对象时,第3行称为:
private Test test = new Test()
这将创建一个新的Test
对象,因此将再次调用第3行,并且将一直重复。
StackOverflowError是Java中的运行时错误。当超过JVM分配的调用堆栈内存量时,将抛出该错误。这是由Test
对象的创建的无限递归引起的。
答案 2 :(得分:1)
public class Test {
//Each time you create a Test object, it creates another Test object, therefore the StackOverflow
private Test test = new Test();
public Test() {
System.out.println("ijshfiksh");
}
public static void main(String[] args) {
Test test = new Test();
}
}
正确的代码:
public class Test {
public Test() {
System.out.println("ijshfiksh");
}
public static void main(String[] args) {
Test test = new Test();
}
}