java - 声明成员类变量并实例化它们

标签 java

我习惯了 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/

相关文章:

java - 将无状态回调放入 BlockingQueue 是否安全?

java - 单击打开 Android 中的特定文件夹

java - 检查帐户是否已存在时出现空指针异常 - Spring+Thymeleaf

java - Spring Boot + Gradle - 在哪里放置环境配置?

java - 在android中执行管道命令

java - 为什么我不能用 try/catch 子句处理 Exception e?

java - 找不到 spring 主页

java - 如何获取sql查询的元数据信息

java - 通过单击 JButton 绘制形状

java - SLF4J - 绑定(bind)被同一应用程序服务器上的其他应用程序覆盖