运行 java class 时发生 StackOverflow 异常

StackOverflow exception occuring when running the java class

我有一个 class 测试。当我 运行 程序抛出 Whosebug 错误时。

Class:

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.WhosebugError
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)

谁能告诉我为什么会这样?

从这里可以看出:

public class Test {
   private Test test = new Test();
   ...
}

您正在 Test 中创建 Test 的实例:要构建该 Test 实例,您必须构建另一个 Test 实例,这也需要一个Test 的实例,等等

当您创建一个新的 Test 对象时,第 3 行被调用:

private Test test = new Test()

这将创建一个新的 Test 对象,因此再次调用第 3 行,并一直重复下去。

WhosebugError 是 java 中的运行时错误。当超过 JVM 分配的调用堆栈内存量时抛出。而这是由于创建Test个对象的无限递归造成的。

public class Test {

   //Each time you create a Test object, it creates another Test object, therefore the Whosebug
   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();
   }
}