运行Java类时发生StackOverflow异常

时间:2020-07-21 10:48:21

标签: java stack-overflow

我有一个班级测验。当我运行程序时,它会引发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)

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

3 个答案:

答案 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();
   }
}
相关问题