可以在java中使用setter cross-class

时间:2016-10-31 07:01:45

标签: java

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

基本上我有一个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

我的理解是我试图将onHealth设置为尚未实例化的对象(这是我在不使用setter方法的不同阶段中出现的错误),所以我该如何重新设计我的方法允许这个?

4 个答案:

答案 0 :(得分:3)

您首先通过调用其构造函数

来实例化您的Board类
Board board = new Board();

然后您可以使用此对象设置值

board.setHealth(health);

您的代码将是

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

答案 1 :(得分:2)

main(String[] args)static方法,您不能直接使用非静态变量/方法。

因此,您需要创建一个instance来访问非静态成员,如下所示:

Board board = new Board();
board.setHealth(health);

静态成员应在类级别使用,您使用ClassName.method();

引用它们

要访问非静态成员,您需要先创建一个实例/对象(Board board = new Board();),然后才能使用objectReference.method();

进行上述访问

请通过以下链接了解有关静态和非静态成员的更多信息: https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

答案 2 :(得分:1)

不...你试图通过使用静态方式调用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);

我希望这可以提供帮助

答案 3 :(得分:0)

#import Project.Globals #import Project.Utilies someVar=Project.Globals.A.SomeFunction() B.AnotherFunction(someVar) (大写字母“B”)可能是Board,而不是对象。 您可能想要创建此类的class

object

然后使用

Board board = new Board();   // Maybe with some parameters in parenthesis