У меня есть класс Test. Когда я запускаю программу, она выдает ошибку 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)

Кто-нибудь может сказать, почему это происходит?

-1
tukeko 21 Июл 2020 в 13:48

3 ответа

Лучший ответ

Как вы можете видеть здесь:

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

Вы создаете экземпляр Test внутри Test: чтобы создать этот Test экземпляр, вы должны создать еще один экземпляр Test, для которого также требуется экземпляр {{X4 }}, и так далее

2
Berto99 21 Июл 2020 в 10:51

Когда вы создаете новый Test объект, строка 3 называется:

private Test test = new Test()

Это создает новый Test объект, поэтому строка 3 вызывается снова, и это повторяется навсегда.

StackOverflowError - это ошибка времени выполнения в Java. Он выбрасывается при превышении объема памяти стека вызовов, выделенной JVM. И это вызвано бесконечной рекурсией создания Test объектов.

2
r0wletc0der 21 Июл 2020 в 10:51
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();
   }
}
1
SwagiWagi 21 Июл 2020 в 10:58