可能重复:
Should I initialize variable within constructor or outside constructor优选的方式来初始化对象
例如我有一个字段int x
。 不喜欢的Java时,它宣布
int x = 0;
或者更确切地说,在构造函数初始化场?
public foo() {
x = 0;
}
从设计的角度来看哪个更受欢迎?
可能重复:
Should I initialize variable within constructor or outside constructor优选的方式来初始化对象
例如我有一个字段int x
。 不喜欢的Java时,它宣布
int x = 0;
或者更确切地说,在构造函数初始化场?
public foo() {
x = 0;
}
从设计的角度来看哪个更受欢迎?
公共FOO(){ X = 0; }
这将是很好的。如果你使用这个int x = 0它将用于所有对象。但构造函数表示法是针对由特定构造函数创建的对象的。而参考变量与空值分配原始类型的
实例变量隐含地初始化。
所以,如果你想分配像::
int x=0;
这将是X = 0的所有对象。
但在构造函数的情况下,你可以在不同的构造不同的值初始化它们,但它不是一个很好的做法,在不同的构造不同的值初始化。
两者都很好,只要你知道会发生什么。
在它们将被初始化的顺序是这样的:
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
。
不喜欢的Java时,它的声明或初始化该领域,而在构造函数?
如果使用默认值进行初始化,则在构造函数中或声明时初始化它将是多余的。
但是,如果你想与默认值不同的值初始化,构造函数应该在delaration使用。
从设计的角度来看哪个更受欢迎?
从设计角度看,没有任何区别。它是实施细节。
我的选择是初始化默认值以外的构造像
int x=0;
所以,如果你有多个构造和很多实例变量,你不会忘了初始化。如果我需要变量的特定值,那么我将在构造函数中重新初始化。
从我所记得的情况来看,编译器在两种情况下生成的字节码都非常相似,而且它实际上只是一种偏好和编码风格。就个人而言,我倾向于在构造函数中初始化变量 - 在某些情况下,无论如何您都必须在构造函数中初始化变量(例如将参数传递给构造函数时),这意味着您只需要在一个地方查看就能理解到底是怎么回事,而不是2
(在一个侧面说明 - 在您的例子有没有必要做“INT X = 0”自定义“INT X;”会自动把它设置为0)
我会做你认为最简单的。例如少线。 –
基元不是什么应用程序设计通常关于:) –
@miku该问题是指C++ –