【问题标题】:Error of static and non-static静态和非静态的误差
【发布时间】:2013-02-12 10:58:18
【问题描述】:

我对何时使用public static void xxx()public void xxx() 感到困惑。我得到的错误是在主类中。

generateRandomNumber();

错误:(错误:非静态方法 generateRandomNumber() 不能 从静态上下文引用)

getUserInput();

他的错误:(错误:非静态方法getUserInput()不能 从静态上下文引用)

getResult();

错误:(错误:无法引用非静态方法getResult() 来自静态上下文)

public class HighLowGame {
 int randomNumber;
 int guess;

public void generateRandomNumber(){
    randomNumber =  (0+(int)(Math.random() * ((0 - 99) + 1)));
}

public void getUserInput(){
    guess = Integer.parseInt(JOptionPane.showInputDialog(
           null,
           "Plaese input"));        
}

public String getResult(){
    if(randomNumber<guess){
       return "Your number is bigger than magic number";
   }
   else if (randomNumber>guess) {
       return "Your number is smaller than magic number";
   }
   else {
       return "You are correct! "+randomNumber;
   }
}

public static void main(String[] args){
    generateRandomNumber();
    getUserInput();
    getResult();
}

}

【问题讨论】:

  • 经验法则:如果字段/方法属于类本身,它必须是静态的。如果它属于该类的一个实例,则它不是静态的。因为非静态的属于一个实例,所以你需要一个实例来访问它们。
  • main() 是静态的。如果不使用这些方法属于该静态方法的类的实例,则不能调用非静态方法(或字段)。

标签: java


【解决方案1】:

您不能直接从静态上下文访问非静态实例方法/变量。你将需要你的类的一个实例来访问它们。

public static void main(String[] args){
    HighLowGame  ref = new HighLowGame ();
   ref. generateRandomNumber();
    ref.getUserInput();
    ref.getResult();
}

或者您可以将所有这些方法设为静态并直接访问它们。当您认为该类的所有实例都应该共享日期/方法时,将方法设为静态。

【讨论】:

    【解决方案2】:

    您正在尝试调用需要HighLowGame 实例才能工作的方法。

    将你的主要方法更改为:-

    public static void main(String[] args){
        HighLowGame game = new HighLowGame();
        game.generateRandomNumber();
        game.getUserInput();
        game.getResult();
    }
    

    【讨论】:

      【解决方案3】:

      您必须在 HighLowGame 的实例上调用方法。

      public static void main(String[] args){
          HighLowGame game = new HighLowGame();
          game.generateRandomNumber();
          game.getUserInput();
          game.getResult();
      }
      

      或者声明你的方法staticlike

      public static void generateRandomNumber(){ ..}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 2015-08-07
        • 2020-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多