【发布时间】:2016-03-01 16:55:01
【问题描述】:
假设我有一个带有私有字段“cpuCount”和默认构造函数的类“ComputerInsane”,如下所示:
public class ComputerInsane {
private int cpuCount = 23;
public ComputerInsane() {
//default constructor
}
}
现在我可以像上面一样将构造函数之外的 cpuCount 初始化为 23 的值,这样当我在类之外创建类 computerInsane 的实例时,私有字段 cpuCount 将自动初始化为 23。不过我也可以在刚刚声明变量之后将初始化放入构造函数中,如下所示:
public class ComputerInsane {
private int cpuCount;
public ComputerInsane() {
//default constructor
cpuCount = 23;
}
}
这样,当我在调用默认构造函数时创建类 computerInsane 的实例时,它也会自动调用。我的问题是这两种类型的字段初始化之间的实际区别是什么,我应该做第一个还是第二个变体?
更重要的是,假设字段是需要用“new”初始化的其他类的对象,或者是数组,因为它们也需要用“new”初始化。同理,那我要不要去:
public class ComputerInsane {
private int cpuCount = 23;
private int[] someArray = new int[10];
Someclass object1 = new Someclass();
public ComputerInsane() {
//default constructor
}
}
或者我去:
public class ComputerInsane {
private int cpuCount;
private int[] someArray;
Someclass object1;
public ComputerInsane(){
//default constructor
cpuCount = 23;
someArray = new int[10];
object1 = new Someclass();
}
}
什么更可取,我应该怎么做?
【问题讨论】:
-
如果它是字面量或常量,则无关紧要。如果它取决于参数,那么它应该在构造函数中。 (您的示例中有一些语法错误,您可能希望遵守 Java 命名约定)
标签: java initialization