2013-07-02 31 views
0

在下面顯示的代碼示例中,我使用「new」關鍵字來實例化字符串數組。然而,實例化僅用於對象,因爲c []數組是靜態的,所以這樣做是錯誤的?是否有另一種方式來做到這一點,或者我應該使用「新」來實例化它,就好像它是一個對象?在Android/Java中靜態數組的實例化

public class SmallTank { 

static String tableString = " "; 

static String c[]; 
static String d[]; 
static String p; 

public SmallTank(){ 

    c = new String[66]; 
    d = new String[29]; 

    // initialize string array 
    for(int v = 0; v<66; v++){ 
     c[v] = null; 
    } 
+0

http://stackoverflow.com/questions/4449935/integer-array-static-initialization – Freak

+0

在使用靜態的側面注意這裏是不好的做法,如果可能的話,你應該避免它:) – JREN

+0

如果你的大小保持不變,那麼它的罰款,否則創建例外。 – Richa

回答

0

數組是一個對象。所以c是一個對象,它是靜態不會改變這一點。

它所做的不過是說,這每個對象的SmallTank將結束覆蓋cd

我覺得你想要的是做static initialization

添加

static { 
    c = new String[66]; 
    d = new String[29]; 

    // initialize string array 
    for(int v = 0; v<66; v++){ 
     c[v] = null; 
    } 
} 

並從構造這些調用。

這將初始化cd只有一次。

0

你並不需要此代碼c[v] = null;,在默認情況下的參考陣列是null的所有元素。數組是一個對象,因此您使用new來實例化它。不要在構造函數中執行它,你可以直接在聲明的地方實例化它。

static String c[] = new String[66]; 

這將創建一個靜態數組對象,因此的類股這object.You可以創建在其他方面也陣列的所有實例:

static String[] c = {"a","b","c"}; 
static String[] c = new String[]{"a","b","c"}; 
0

你的數組是對象。因此它們使用new創建。

只有對該對象的引用通過static關鍵字綁定到class

0

在java中,每個array是一個object。無關緊要的數組是靜態引用。 對於初始化目的,你可以使用靜態初始化塊

static { 

     c = new String[66]; 
     d = new String[29]; 

     } 

它會首先加載只有一次,當在內存中的類加載。

0

static修飾符的含義是:

你可以把一個「靜態」的方法或字段,如果它被聲明的類定義之外。換句話說,

只有一個「副本」的靜態字段/方法。 靜態字段/方法不能訪問非靜態字段/方法。

所以你會希望是:

static String c[] = new String[66]; 
static String d[] = new String[29]; 
0

與方法的問題是該數組被初始化每次創建SmallTank的一個實例。也許這是你想要的,但通常情況下,靜態初始化器是正確的做法:

public class SmallTank { 

    static String tableString = " "; 

    static String c[] = new String[66]; 
    static String d[] = new String[29]; 
    static String p; 

    static { 
     // initialize string array 
     for(int v = 0; v<66; v++){ 
      c[v] = null; 
     } 

這一次初始化數組,當首次加載的類 - 通常是你第一次創建它的任何實例。

正如其他人所指出的,初始化爲null是毫無意義的。

0

聲明它們時初始化數組,而不是在構造函數中。

public class SmallTank { 
    static String c[] = new String[66]; 
    static String d[] = new String[99]; 
... 
} 

在構造函數中這樣做是合法的,但使用靜態字段的目的是在實例之間共享它。就你而言,每次創建SmallTank的新實例時,陣列都會重置。

0

數組是Java中的對象。因此,它們使用new關鍵字創建。

而且只有一個靜態字段/方法的「副本」。在類中只有一個靜態變量存在,並且它總是在所有類的方法之間共享。靜態字段/方法不能訪問非靜態字段/方法。

所以,你可以修改代碼爲:

static String c[] = new String[66]; 
static String d[] = new String[29]; 

您也可以參考這個文檔: http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html