2015-10-16 279 views
-1

我開始創建一個Hang子手遊戲。我想要一個主類和一個方法類。我想獲得一個祕密的詞,但我得到一個錯誤:靜態/非靜態方法參考

non-static method getWord() cannot be referenced from a static context.

也許我得到這個錯誤,因爲沒有對象被創建?這裏有什麼問題,我該如何解決這個問題? PS:也許用enum來實現它可能會更好,但我想以這種方式開始。

public class HangmanMain { 
    public static void main(String[] args) { 
     String secretWord; /* chosen secret word*/ 
     secretWord = HangmanUtil.getWord(); 
     System.out.println(""); 
    } 

} 

public class HangmanUtil { 

    private String[] wordBank = {"pool","ice", "america", "hook", "book", "glass" , "hint", "giraffe"," elephant", "ocean","market"}; 

    String guess; 
    private int bodyPartsLeft; 

    String getWord(){ 
     int len = wordBank.length; 
     int rand = (int)(Math.random() * (len + 1)); 
     return wordBank[rand]; 
    } 

} 
+0

「也許我得到這個錯誤,因爲沒有創建對象?」 - 完全正確。您需要實例化包含的類,然後才能調用其中一個非靜態方法。 – JonK

回答

0

您回答自己:

Maybe I get this error because no object has been created ?

要麼創建的HangmanUtil一個新的實例,或使HangmanUtil.getWord()方法是靜態的。

編輯:考慮到它是一個工具類,我相信第二種選擇更好:使用HangmanUtil靜態類與靜態方法。

+0

謝謝:)。 「private static String [] wordBank = ...,」和「static String getWord(){...」解決問題(也創建一個新的實例)。 「公共靜態類HangmanUtil {」不編譯。 – Niminim

+0

是的,一個類不能被標記爲「靜態」,只有它的內容。你也應該使構造函數「private」充分使這個類變得「靜態」。 –

0

除非方法是靜態的,否則不能通過ClassName.methodName()調用方法。

如果你想調用一個非靜態方法,你需要一個實例。例如。

HangmanUtil hu = new HangmanUtil(); 
secretWord = hu.getWord(); 

如果你不想做一個實例,然後你的方法需要被標記static,和它引用的其他方法或字段也必須是靜態的。