2015-10-16 158 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,和它引用的其他方法或字段也必须是静态的。