Java - создание экземпляров объектов того же класса в своем конструкторе - PullRequest
3 голосов
/ 31 января 2012

Почему создание экземпляров объектов одного и того же класса в его конструкторе вызывает StackOverflowError? Например,

public class A {
    public A () {
        A a = new A() 
    }
}

бросит StackOverFlowError?

Ответы [ 2 ]

10 голосов
/ 31 января 2012

Это точно так же, как и с любой другой функцией, безоговорочно вызывающей себя с точно такими же параметрами:

public void f() {
  f(); // <---- will cause a stack overflow due to infinite recursion
}

Функция просто продолжает вызывать себя, и для каждого вызова требуется место в стеке.Рано или поздно стек исчерпывается, и вы получаете исключение.

Точно так же происходит, когда A() продолжает вызывать себя (в new A()).

5 голосов
/ 31 января 2012

Поскольку ваш оператор new A() будет вызывать конструктор класса A, который будет вызывать конструктор класса A и так далее.Это создает бесконечную рекурсию.Это заставляет JVM генерировать StackOverflowError s.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...