Java 代码中的 StackOverFlowError

StackOverFlowError in Java code

我正在编写一个简单的代码,但在第 2 行的以下代码中收到 WhosebugError:Tmp4 t = new Tmp4 (); 如果我省略第 6 行(p 的初始化)或省略第 2 行,我不会出错。我也没有进行递归调用。

我想问一下为什么会出现这样的错误。在省略第 2 行或第 6 行时,它不会给出 WhosebugError。

此外,它仅在我的系统上显示或代码有问题。

谢谢。

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");

    }
}

通过执行 Tmp4 t = new Tmp4 ();,您试图在其对象中初始化相同 class 的对象,该对象将无限递归并给您 Whosebug 异常。

如下所示删除此行:

public class Tmp4 {
    /* Remove this line */
    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

    }
}

当你启动你的程序时,第一个执行的是第一行和第二行。 第 2 行是初始化 Tmp4 类型的新对象的地方。初始化第 4 行被调用,它再次创建一个 Tmp4 类型的新对象。随着 t 的初始化,第 4 行再次被调用,导致无限递归调用,因此出现 WhosebugException。删除第 4 行以消除 WhosebugException 的原因。因为第4行造成死循环,第3行一直没有执行。

WhosebugError 发生在你的代码中有一个无限循环,就像你在第 2 行中的那样。

public class Tmp4 {
Tmp4 t = new Tmp4 (); // This creates an infinite loop
}

第 2 行称为实例初始化程序,它甚至发生在构造函数之前。现在,由于您正在创建 Tmp4 的另一个实例,它随后将调用它自己的实例初始化器,后者将调用它们的实例初始化器,依此类推。循环永远不会结束。