Java构造函数是否仅在参数化时调用?

ICo*_*mer -3 java parameters constructor default-constructor

显然Java认为我的构造函数代码并不重要,所以当我尝试访问我认为已初始化的ArrayList时,它完全忽略它然后用NullPointerException对我大喊大叫.只有当我向构造函数添加任意参数时,Java才会认为值得关注.

import java.util.ArrayList;

public class DataManager {
    ArrayList<Variable> vars;

    public DataManager() {
        vars = new ArrayList<Variable>();
    }

    public void createVar(String type, String name, String strValue, int numValue) {
        vars.add(new Variable(type, name, strValue, numValue));
    }
}
Run Code Online (Sandbox Code Playgroud)

以及调用此代码的代码:

DataManager data = new DataManager();
data.createVar(...);
Run Code Online (Sandbox Code Playgroud)

变量类:

class Variable {
    String type;
    String name;
    String strValue;
    int numValue;

    public Variable(String type, String name, String strValue, int numValue) {
            this.type = type; this.name = name;
            this.strValue = strValue;
            this.numValue = numValue;
    }
}
Run Code Online (Sandbox Code Playgroud)

运行此结果

线程"main"中的异常java.lang.ArrayIndexOutOfBoundsException:在SudoCode.main(SudoCode.java:6)的SudoCode.go(SudoCode.java:10)的Parser.start(Parser.java:25)处出现1

那么......这笔交易是什么?为什么构造函数在未参数化时会被忽略?这不是很直观.这是某种设计选择,我看不出明显的含义吗?如果是这样,请赐教.我应该添加一个任意参数,以便执行构造函数,还是应该创建并显式调用专门用于初始化我的ArrayList的方法?

谢谢!

Dan*_* D. 6

你的假设是假的.如果没有执行构造函数,则无法实例化对象.

如果定义没有构造函数的类,Java将创建一个没有参数的隐式("默认")构造函数.