为了账号安全,请及时绑定邮箱和手机立即绑定

方法被调用早于定义

方法被调用早于定义

杨魅力 2022-05-25 16:41:13
我有这些代码行: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() 获取之前执行。对此有什么解释吗?控制台输出:BCA: 
查看完整描述

2 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

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


它之前没有被执行toString()。它之前被执行System.out.println(),打印结果toString()


由于您在内部打印getFamilyMembers(),并且getFamilyMembers在打印语句之前进行评估,因此您会看到getFamilyMembers()之前的结果toString


如果您更改getFamilyMembers()方法以返回Person对象的名称而不是打印它们,那么您将看到预期的结果:


public String getFamilyMembers() {

    StringBuilder sb = new StringBuilder();

    for (Person person : this.family) {

        sb.append(person.toString();

    }

    return sb.toString();

}

或者,如果您对以下格式感到满意


[A, B, C]

你可以return family.toString();


查看完整回答
反对 回复 2022-05-25
?
倚天杖

TA贡献1828条经验 获得超3个赞

我接受了@GBlodgett 给我的答案:


    public String getFamilyMembers() {

    String a = "";

    for (Person person : this.family) {

        a = a.concat(person.toString());

    }

    return a;

}

输出:


A: BC


查看完整回答
反对 回复 2022-05-25
  • 2 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号