2012-12-28 38 views

回答

0

公共FOO(){ X = 0; }

這將是很好的。如果你使用這個int x = 0它將用於所有對象。但構造函數表示法是針對由特定構造函數創建的對象的。而參考變量與空值分配原始類型的

0

實例變量隱含地初始化。

所以,如果你想分配像::

int x=0; 

這將是X = 0的所有對象。

但在構造函數的情況下,你可以在不同的構造不同的值初始化它們,但它不是一個很好的做法,在不同的構造不同的值初始化。

1

兩者都很好,只要你知道會發生什麼。

在它們將被初始化的順序是這樣的:

  1. 類成員(如:public int x = 0;
  2. 構造(如: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

0

不喜歡的Java時,它的聲明或初始化該領域,而在構造函數?

如果使用默認值進行初始化,則在構造函數中或聲明時初始化它將是多餘的。

但是,如果你想與默認值不同的值初始化,構造函數應該在delaration使用。

從設計的角度來看哪個更受歡迎?

從設計角度看,沒有任何區別。它是實施細節。

0

我的選擇是初始化默認值以外的構造像

int x=0; 

所以,如果你有多個構造和很多實例變量,你不會忘了初始化。如果我需要變量的特定值,那麼我將在構造函數中重新初始化。

0

從我所記得的情況來看,編譯器在兩種情況下生成的字節碼都非常相似,而且它實際上只是一種偏好和編碼風格。就個人而言,我傾向於在構造函數中初始化變量 - 在某些情況下,無論如何您都必須在構造函數中初始化變量(例如將參數傳遞給構造函數時),這意味着您只需要在一個地方查看就能理解到底是怎麼回事,而不是2

(在一個側面說明 - 在您的例子有沒有必要做「INT X = 0」自定義「INT X;」會自動把它設置爲0)