我正在尝试从另一个类中访问对象设置器以进行扫雷游戏,并且我不确定它是否真的可行。
基本上我有一个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方法的不同阶段中出现的错误),所以我该如何重新设计我的方法允许这个?
答案 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