我正在编写一个简单的代码,并在第2行的以下代码中收到StackOverflowError:Tmp4 t = new Tmp4 ();
如果省略第6行(p
的初始化)或省略第2行,我不会出错。而且我没有进行递归调用。
我想问为什么它给出了这样的错误。在省略第2行或第6行时,它没有给出StackOverflowError。
它还仅在我的系统上给出或代码有问题。
谢谢。
public class Tmp4 {
Tmp4 t = new Tmp4 ();
public static void main(String[] args) {
System.out.println("main");
Tmp4 p = new Tmp4 ();
System.out.println("main2");
}
}
最佳答案
public class Tmp4 {
Tmp4 t = new Tmp4 (); //Line 4
public static void main(String[] args) {
System.out.println("main"); // Line 1
Tmp4 p = new Tmp4 (); //Line 2
System.out.println("main2"); //Line 3
}
}
当您启动程序时,第1行和第2行会首先执行。
第2行是您初始化Tmp4类型的新对象的地方。通过初始化,第4行被调用,这再次创建了一个Tmp4类型的新对象。随着t的初始化,再次调用第4行,从而导致无限递归调用,从而导致StackOverflowException。删除第4行以消除引起StackOverflowException的原因。由于第4行引起的无限循环,因此从不执行第3行。