Java 方法的调用时间早于定义的时间
我有以下几行代码:Java 方法的调用时间早于定义的时间,java,oop,Java,Oop,我有以下几行代码: 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 {
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()
get之前执行code>get。有什么解释吗
在toString()
之前不会执行它。它在打印toString()结果的System.out.println()之前执行
由于您在getFamilyMembers()
内部打印,并且在print语句之前对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]
您可以返回family.toString()代码>我同意@GBlodgett给我的答案:
public String getFamilyMembers() {
String a = "";
for (Person person : this.family) {
a = a.concat(person.toString());
}
return a;
}
产出:
A: BC
你甚至从未将男人
和女人
添加到家庭
。请确保问题对我们来说是可复制的。很抱歉,我忘记在我的问题中包括family.addPerson(男子)和family.addPerson(女子)getFamilyMembers()
将在sout
方法之前运行,以评估它应该打印什么。换句话说,首先执行toString()
,然后执行getFamilyMembers()
,它有自己的打印语句,最后执行System.out.println()
在main方法中。但是返回将导致循环stop@Ezrab_否,将字符串连接到循环内,然后在循环后返回
A: BC