我习惯了 C++,你必须在构造函数中实例化所有内容,但最近的实现让我对 java 感到非常困惑。我只是在构造函数中实例化事物,然后我意识到这个语法是有效的:
public class DebateCompetition {
private boolean isAdvanced;
ArrayList<Debate> debates = new ArrayList<Debate>(); //<------
ArrayList<Team> teams;
ArrayList<School> schools;
public void addSchool(School s) {
schools.add(s);
}
}
但这留下了很多问题。第一:它有什么作用?第二:什么时候new ArrayList<Debate>()
叫?第三:这是否是最佳实践?
最佳答案
First: What does it do?
所有字段初始值设定项都会在构造函数中的代码执行之前(按顺序)执行。 (在这种情况下,您还没有声明构造函数,因此有一个默认的无参数构造函数,它调用父类(super class)的无参数构造函数。)
Second: When is new ArrayList() called?
它在新对象的实例化过程中被调用。
该调用发生在父类(super class)构造函数完成之后、执行此类构造函数中的语句之前。 (在这种情况下,构造函数中没有任何语句。)
Third: Is this a best practice, or not?
没问题。
关于java - 声明成员类变量并实例化它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16246645/