Java 静态/非静态方法参考

Java 静态/非静态方法参考,java,static,Java,Static,我开始制作一个刽子手游戏。我想要一个主类和一个方法类。我想得到一个秘密单词,但我得到一个错误: 无法从静态上下文引用非静态方法getWord() 可能是因为没有创建对象而出现此错误?这里出了什么问题,我该如何解决 PS:也许用enum实现它会更好,但我想从这个角度开始 public class HangmanMain { public static void main(String[] args) { String secretWord; /* chosen secret

我开始制作一个刽子手游戏。我想要一个主类和一个方法类。我想得到一个秘密单词,但我得到一个错误:

无法从静态上下文引用非静态方法
getWord()


可能是因为没有创建对象而出现此错误?这里出了什么问题,我该如何解决

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];
    }

}  

你回答自己:


可能是因为没有创建对象而出现此错误

创建
HangmanUtil
的新实例,或者将
HangmanUtil.getWord()方法设置为静态


EDIT:考虑到它是一个实用类,我认为第二个选项更好:使
HangmanUtil
成为一个带有静态方法的静态类

除非方法是静态的,否则不能通过
ClassName.methodName()
调用方法

如果要调用非静态方法,则需要一个实例。例如

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

如果您不想创建实例,那么您的方法需要标记为“静态”
,并且它引用的任何其他方法或字段也必须是静态的。

“可能是因为没有创建对象而出现此错误?”-这完全正确。您需要先实例化包含类,然后才能调用它的一个非静态方法。谢谢:)。“private static String[]wordBank=…,”和“static String getWord(){…”解决了这个问题(并创建了一个新实例)。“public static class HangmanUtil{”不编译。是的,一个类不能被标记为
static
,只能标记其内容。你还可以使构造函数
private
完全使该类成为“static”。