方法被调用早于定义

我有这些代码行:


Family family = new Family("A");

Man man = new Man("B");

Woman woman = new Woman("C");

family.addPerson(man);

family.addPerson(woman) 

System.out.println(family.toString() + ": " + family.getFamilyMembers());

这是家庭课程:


public class Family {


    private String name;

    private ArrayList<Person> family = new ArrayList<>();


    public Family(String name) {

        this.name = name;

    }


    public void addPerson(Person person) {

        this.family.add(person);

    }


    public String getFamilyMembers() {

        for (Person person : this.family) {

            System.out.println(person.toString());

        }

        return "";

    }


    @Override

    public String toString() {

        return this.name;

    }


}

我不明白的是,当我运行程序时 family.getFamilyMembers(); 在 family.toString() 获取之前执行。对此有什么解释吗?


控制台输出:


B

C

A: 


杨魅力
浏览 116回答 2
2回答

HUWWW

我不明白的是,当我运行程序时,family.getFamilyMembers();gets 会在 get 之前执行family.toString()。对此有什么解释吗?它之前没有被执行toString()。它之前被执行System.out.println(),打印结果toString()由于您在内部打印getFamilyMembers(),并且getFamilyMembers在打印语句之前进行评估,因此您会看到getFamilyMembers()之前的结果toString如果您更改getFamilyMembers()方法以返回Person对象的名称而不是打印它们,那么您将看到预期的结果:public String getFamilyMembers() {&nbsp; &nbsp; StringBuilder sb = new StringBuilder();&nbsp; &nbsp; for (Person person : this.family) {&nbsp; &nbsp; &nbsp; &nbsp; sb.append(person.toString();&nbsp; &nbsp; }&nbsp; &nbsp; return sb.toString();}或者,如果您对以下格式感到满意[A, B, C]你可以return family.toString();

倚天杖

我接受了@GBlodgett 给我的答案:&nbsp; &nbsp; public String getFamilyMembers() {&nbsp; &nbsp; String a = "";&nbsp; &nbsp; for (Person person : this.family) {&nbsp; &nbsp; &nbsp; &nbsp; a = a.concat(person.toString());&nbsp; &nbsp; }&nbsp; &nbsp; return a;}输出:A: BC
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java