可能重复:
Should I initialize variable within constructor or outside constructor
例如,我有一个字段int x
。
Java是否更喜欢在声明
int x = 0;
或者更确切地说是构造函数?
public foo() {
x = 0;
}
从设计角度来看哪个更受欢迎?
答案 0 :(得分:1)
两者都很好,只要你知道会发生什么。
初始化它们的顺序是:
public int x = 0;
)this.x = 0;
)但是,将整数初始化为零是无操作。 Java会自动执行此操作。
一个小演示来演示忽略初始化顺序的错误:
class Foo
{
public String str;
public String strTwo = "Here is str: " + str;
public Foo()
{
str = "Java";
System.out.println(strTwo);
}
}
这将打印Here is str: null
。
答案 1 :(得分:0)
public foo(){ x = 0; }
这将是好事。如果你使用这个int x = 0,它将适用于所有对象。但构造函数表示法用于由特定构造函数创建的对象。答案 2 :(得分:0)
原始类型的实例变量被隐式初始化,而引用变量被赋值为空值。
所以如果你想指定像::
那样int x=0;
对于所有对象,它将是x = 0.
但是在构造函数的情况下,您可以在不同的构造函数中使用不同的值初始化它们,尽管在不同的构造函数中使用不同的值初始化它不是一个好习惯。
答案 3 :(得分:0)
Java是否更喜欢在声明字段时或者在构造函数中初始化字段?
如果使用默认值进行初始化,则在构造函数或声明时初始化将是多余的。
但是,如果要使用与默认值不同的值进行初始化,则应使用构造函数而不是delaration。
从设计角度来看哪个更受欢迎?
从设计的角度来看,没有任何区别。这是实施细节。
答案 4 :(得分:0)
我的偏好是在构造函数之外初始化默认值,如
int x=0;
因此,如果您有多个构造函数和大量实例变量,那么您将不会忘记初始化。如果我需要变量的特定值,那么我将在构造函数中重新初始化。
答案 5 :(得分:0)
根据我的记忆,编译器在两个实例中生成的字节码几乎完全相同,实际上只是偏好和编码风格的问题。就个人而言,我倾向于在构造函数中初始化变量 - 在某些情况下,您将不得不在构造函数中初始化变量(例如将参数传递给构造函数时),这意味着您只需要在一个地方查看以理解发生了什么,而不是2。
(旁注 - 在您的示例中,不需要执行“int x = 0”,因为定义“int x;”会自动将其设置为0.)