我对类的变量初始化有疑问。当通常使用变量声明类并初始化(即使它们是最终的)时,我会通过构造函数来实现。
例如:
class Example {
private int a, b;
public Example () {
a = 5;
b = 10;
}
// Methods
}但是您也可以在声明之后立即启动。
例如:
class Example {
private int a = 5, b = 10;
// Methods
}初始化变量的最佳方法是什么?有什么关系?
发布于 2015-01-13 02:15:36
第一种方法初始化的变量将在运行init<>方法时获得它们的值。第二种方法初始化的变量将在执行构造函数时获得它们的值。对于像这样的简单用例,没有有效的区别,但是如果有多个构造函数或对象生命周期中发生的“有趣的”事情,这可能很重要。没有永远-更好的方法。
(如何获得不同行为的一个例子是,如果超类的构造函数(必须在子类之前运行)使用反射来基于实例字段变量进行操作的话。这不是一件很常见的事情,但这是我所说的“有趣”的一个例子。)
发布于 2015-01-13 02:32:14
class Foo {
String username = "user";
String password = null;
}在功能上等价于
class Foo {
String username, password;
Foo() {
username = "user";
passowrd = null;
}
}但是,考虑到在以后的某个时候需要添加另一个构造函数的情况:
public Foo(String password) {
this.password = password;
}现在,调用new Foo("mypasswd")的人冒着username未初始化的风险。如果您在声明成员变量时初始化它们,那么不管类的实例是如何创建的(反序列化除外,这是一个单独的故事!)如果在默认构造函数中初始化它们,那么所有其他构造函数都需要显式调用它,或者负责初始化变量本身。
在声明变量时,最好总是给所有变量某种初始值,以减少意外和不可预测行为的可能性。
https://stackoverflow.com/questions/27913938
复制相似问题