我正在编写一个简单的代码,并在第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行。

09-26 02:14