2012-03-01 75 views
2

我對編程有點新,所以我確信這是一個簡單的答案。調用另一個類的字符串[]是顯示爲空

基本上,在我的主要方法,我想這樣做:

...

wordtime = new LabelField("" + DataStored.words[0]);

...

現在在DataStored I類有: .. 。

public static String[] words; 
{ 
    words = new String[2]; 

    words[0] = "Oil sucks!"; 
    words[1] = "Do you know that I can talk?"; 
} 

...

所以每次我嘗試編譯程序時,它都會停止在主類上,說DataStored.words [0]爲空。我怎樣才能讓它從其他課程的領域填充?先謝謝你!

回答

4

你在非初始化wordsDataStored的靜態初始化塊。這意味着words將不會被初始化,直到您實際上構造DataStored的一個實例,這可能不是您想要的。

您需要做初始化塊靜態,像這樣:

public static String[] words; 
static { // <--------------------- 
    words = new String[2]; 

    words[0] = "Oil sucks!"; 
    words[1] = "Do you know that I can talk?"; 
} 

這將導致當DataStored類是加載要運行的塊。

6

你寫了一個初始化塊有 - 這將是每次創建的DataStored一個新實例時執行,但時間不直到。我懷疑你想:

public static String[] words = { "Oil sucks!", "Do you know that I can talk?" }; 

這也是一個壞主意,有這樣的公共領域,至少比常量的任何其他(其中包括在我看來穩定的類型)。

(我懷疑這是在失敗編譯時間雖然 - 這是一個執行時間失敗值得被明確的區別。)

1

如果要正確初始化words,則需要在靜態塊中執行該操作,該類會在加載類後立即運行。一個初始化塊,只有在調用構造函數之前創建類的實例時纔會運行。因此,當您撥打DataStored.words[0]時,初始化程序尚未運行,並且words仍然爲空。

public static String[] words; 

static 
{ 
    words = new String[2]; 

    words[0] = "Oil sucks!"; 
    words[1] = "Do you know that I can talk?"; 
} 

或者你可以簡單地做:

public static String[] words = new String[]{"Oil sucks!","Do you know that I can talk?"}; 

或更短還是:

public static String[] words = {"Oil sucks!","Do you know that I can talk?"}; 
1

如果定義靜態初始化塊在類DataStored這兩個變量。你可以訪問它。

類DataStored {

public static String [] words;

靜態{

words[0] = "Oil sucks!"; 
words[1] = "Do you know that I can talk?"; 

}

}

-1

公共靜態字符串[]字; {words} = new String [2];

words[0] = "Oil sucks!"; 
words[1] = "Do you know that I can talk?"; } 

如果你想用這個作爲一種方法在方法頭初始化words,而不是宣佈字符串的再加入parathesis數組話後,並刪除分號。

+0

-1。你的代碼與問題中的代碼完全等價,只是有一些空白的改變。 – 2012-03-01 20:38:42

+0

我只是在引用他的代碼。沒有改變它。我在評論中陳述了他需要的改變。 – Avogadro 2012-03-02 01:44:35

+0

'public static String [] words(){words = new String [2]; words [0] =「Oil sucks!」; words [1] =「你知道我可以說話嗎?」; }' – Avogadro 2012-03-02 02:06:30

相關問題