Не в состоянии вызвать ни одного из конструкторов? - PullRequest
0 голосов
/ 05 марта 2020
public class Test {

    public static void main(String args[]){
        System.out.println("Main");
        Test2 test2 = new Test2();
    }

}

class Test2 {

     Test2() {
         System.out.println("Inside Test2");
         //do something 
     }
     Test3 test = new Test3();

}

class Test3 {

     Test3() {
         System.out.println("Inside Test3");
         //do something  
     }
     Test2 test2 = new Test2();
}

Здесь я хотел понять, почему это утверждение Test2 test2 = new Test2(); в основном методе класса Test не может вызвать конструктор класса Test2 и, аналогично, Test3 test = new Test3(); в Test2 не может вызвать конструктор класса Test3.

Здесь я хотел бы понять причину такого поведения?

Ожидаемый выход: Main Inside Test2 Inside Test3
Токовый выход: Main с этой ошибкой

Exception in thread "main" java.lang.StackOverflowError
    at com.practice.stackoverflow.Test3.<init>(Test.java:26)
    at com.practice.stackoverflow.Test2.<init>(Test.java:17)
    at com.practice.stackoverflow.Test3.<init>(Test.java:26)

1 Ответ

4 голосов
/ 05 марта 2020

Test2 создает новый Test3 объект ... который создает новый Test2 объект ... и т. Д.

Вы пытаетесь создать бесконечное количество объектов, поэтому, естественно, вы получит StackOverflowError.

Будет работать следующее:

public class Test {

    public static void main(String args[]){
        System.out.println("Main");
        Test2 test2 = new Test2();
    }

}

class Test2 {

     Test2() {
         System.out.println("Inside Test2");
         //do something 
     }
     Test3 test = new Test3();

}

class Test3 {

     Test3() {
         System.out.println("Inside Test3");
         //do something  
     }
     Test4 test4 = new Test4();
}

class Test4 {
    Test4() {
        System.out.println("Inside Test4");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...