我有以下代码行:
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:
答案 0 :(得分:3)
我不了解的是,当我运行程序时,
family.getFamilyMembers();
在family.toString()
之前执行。有什么解释吗?
在toString()
之前没有执行。它在System.out.println()
之前执行,并显示toString()
由于您在getFamilyMembers()
内打印,并且getFamilyMembers
在print语句之前被求值,因此您会看到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();
答案 1 :(得分:0)
我接受了@GBlodgett给我的答案:
public String getFamilyMembers() {
String a = "";
for (Person person : this.family) {
a = a.concat(person.toString());
}
return a;
}
输出:
A: BC