Почему вызов этой функции в конструкторе вызывает ошибку stackoverflow? - PullRequest
0 голосов
/ 14 мая 2018

Привет, у меня есть класс Person, у которого есть метод fatherComesFirst, который создает экземпляр Person father. Однако когда я вызываю этот метод в конструкторе, почему jvm выдает ошибку stackoverflow? Я новичок Хотя я верю до сих пор, я прав.

Мой код.

package intermediate;

public class Person {

    //getters & setters

    private String firstName;

    private String lastName;

    public Person(String firstName, String lastName){
        this.firstName = firstName;
        this.lastName = lastName;
        fatherComesFirst("",lastName);
    }

    public void fatherComesFirst(String firstName, String lastName){
        Person father = new Person(firstName,lastName);
        System.out.println(father.getFirstName()+" "+father.getLastName());
    }

}

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

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

0 голосов
/ 14 мая 2018

Поскольку всякий раз, когда вы создаете экземпляр класса Person(), он вызывает функцию fatherComesFirst(), которая в первой строке этой функции создает другой экземпляр того же класса.Это бесконечный цикл.

...