可能重複:
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++ –