为什么在构造函数中调用此函数会产生stackoverflow错误?

时间:2018-05-14 04:37:48

标签: java stack-overflow

您好我有一个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 :(得分:4)

因为无论何时创建Person()类的实例,它都会调用函数fatherComesFirst(),该函数在该函数的第一行创建同一类的另一个实例。这是一个无限循环。

答案 1 :(得分:1)

这实际上是一个无限循环。每当命中构造函数时,它都会调用一个实例化另一个Person的函数。当这个Person被实例化时,它也会调用同一个实例化另一个Person的函数,这个函数在构造中也会调用该函数......你得到了这个想法。