This question already has answers here:
Java non-static method addInv(int) cannot be referenced from a static context
                                
                                    (4个答案)
                                
                        
                3年前关闭。
            
        

我正在尝试从另一个类访问扫雷游戏的对象设置器,并且不确定是否确实可行。

本质上,我有一个Board类,其中包含设置木板的所有逻辑,并且在我的main方法内部,我想提示用户输入一个int,然后将该值传递给Board.setHealth()

我的主要方法(包含在Mines.java中)的提示如下

if (keyboard.nextInt() < 1) {
  throw new Exception("Number must be higher than 0!");
}
else health = keyboard.nextInt();
Board.setHealth(health);


在我的Board.java构造函数中,我声明了2个整数,startHealth(1)health(not yet defined)

我的板setHealth方法如下

  public void setHealth(int health){
    this.health = health;
  }


现在,我当前遇到的错误是

non-static method setHealth(int) cannot be referenced from a static context

我的理解是,我正在尝试在尚未实例化的对象上设置setHealth(这是我在未使用setter方法的另一个阶段出现的错误),因此如何重新设计我的方法以允许这样做?

最佳答案

不...您正尝试使用静态方式调用setHealth,但未将其声明为静态
只有以这种方式声明方法时,才能使用代码

  public static void setHealth(int health){
    this.health = health;
  }


但是,如果以这种方式执行操作,则healt应该也是静态的,并且静态变量对于类的所有实例都是通用的,因此这不是一个好的策略

对于您的主要方法,您应该执行以下操作

if (keyboard.nextInt() < 1) {
  throw new Exception("Number must be higher than 0!");
}
else health = keyboard.nextInt();
Board b = new Board();
b.setHealth(health);


我希望这可以帮助

10-06 16:07