2011-11-09 83 views
60

我有一個類,並在該類我有這樣的:Java的初始化在構造函數int數組

//some code 
private int[] data = new int[3]; 
//some code 

然後在我的構造函數:

public Date(){ 
    data[0] = 0; 
    data[1] = 0; 
    data[2] = 0; 
} 

如果我這樣做,一切都OK 。默認數據值初始化,但如果我不是這樣做:

public Date(){ 
    int[] data = {0,0,0}; 
} 

它說:

Local variable hides a field 

爲什麼?

什麼是在構造函數中初始化數組的最佳方式?

感謝

+0

我希望你是知道的變量的作用域的概念?你的變量'data'在'「之後//」某個代碼「'具有整個類的範圍。而構造函數中的變量'data'在構造函數中有一個作用域。一旦構造函數完成,變量將被銷燬。此外,構造函數中的data變量在類中隱藏了相同名稱的變量。這證明錯誤'本地變量隱藏字段' –

回答

127
private int[] data = new int[3]; 

這已經初始化您的數組元素爲0.您不需要再次在構造函數中重複。

在你的構造應該是:

data = new int[]{0, 0, 0}; 
+0

是的。這是它允許我的唯一方式。只輸入數據;說「它不是一個聲明」。謝謝 – Favolas

+0

不能在defualt的構造函數Date()中使用'data = new int [3]'? – parsecer

4

何不乾脆

public Date(){ 
    data = new int[]{0,0,0}; 
} 

你有原因的錯誤是因爲int[] data = ...聲明一個新的變量和隱藏領域data

然而,應該指出的是內容陣列已經初始化爲0(默認值爲int

0

在構造函數要創建另一個int數組:

public Date(){ 
    int[] data = {0,0,0}; 
    } 

試試這個:

data = {0,0,0}; 

注意:如果被聲明爲實例變量,你不需要初始化數組元素的方式。實例變量會自動獲取其默認值,對於整數數組,默認值全爲零。

如果你有本地聲明的數組,但他們你需要初始化每個元素。

0

最好的方法是不寫任何初始化語句。這是因爲如果您編寫 int a[]=new int[3]那麼默認情況下,在Java中,所有數組的值即a[0],a[1]a[2]被初始化爲0!關於隱藏字段的局部變量,請發佈您的整個代碼,以便我們得出結論。

6

你既可以做

public class Data { 

    private int[] data; 

    public Data() { 

    data = new int[] { 0, 0, 0 }; 
    } 
} 

它在構造函數初始化data,或

public class Data { 

    private int[] data = new int[] {0,0,0}; 

    public Data() { 

    // data already initialised 
    } 

}

,在執行構造函數中的代碼之前初始化data

+0

我必須把data = new int [] {0,0,0};在構造函數中。如果我在構造函數中的代碼之前初始化僅放入數據;在構造函數中給了我「不是一個語句」錯誤 – Favolas

+0

如果數組中有超過百萬的元素..你想使用第一個代碼並改變行'public Data()throws Error {'如果將拋出OutOfMemoryError。 –

4

這是因爲在構造函數中聲明瞭與屬性名稱相同的局部變量。

要分配的所有元素初始化爲零的整數數組,在構造寫:

data = new int[3]; 

要分配其具有其它的初始值整數數組,把這個代碼在構造:

int[] temp = {2, 3, 7}; 
data = temp; 

或:

data = new int[] {2, 3, 7};