所以,简而言之。我有两节课。
package rpg;
public class Engine {
public void main(String args[]) {
Start.gameStart();
System.out.println(menuResult);
}
}
和
package rpg;
public class Start {
int menuResult = 3;
public int gameStart()
{
return menuResult;
}
public int getMenuResult()
{
return Start.menuResult;
}
}
它不断抛出错误'无法对非静态方法gameStart()进行静态引用。 我确定我错过了一些简单但却找不到的东西。 谢谢!
答案 0 :(得分:7)
您需要在该实例上创建Start
类的实例并调用gameStart()
方法,因为gameStart()
是实例方法而不是静态方法。
public void main(String args[]) {
new Start().gameStart();
..................
}
只能使用类名作为perfix来访问静态方法。
答案 1 :(得分:2)
public int gameStart() <--- Instance method not static method
在实例上调用它
Start start = new Start();
start.gameStart();
所以最后你的课程应该如下所示
public static void main(String args[]) {
Start start = new Start();
start.gameStart();
System.out.println(start.getMenuResult());
}
public class Start {
private int menuResult = 3;
public int gameStart() {
return this.menuResult;//Don't know why there are two methods
}
public int getMenuResult() {
return this.menuResult;
}
}
答案 2 :(得分:2)
首先主要方法应该是
public static void main(String args[]) {
}
我假设您可以拥有多个游戏,因此您应该能够启动多个实例,因此您应该创建一个可以创建的非静态类,然后执行操作。
要回答原始问题,您需要一个具有静态getter和setter的静态变量。
public class Start {
private static int menuResult = 3;
public static int gameStart()
{
return menuResult;
}
public static int getMenuResult()
{
return Start.menuResult;
}
答案 3 :(得分:0)
如果您需要将该方法设置为静态,只需在函数定义中添加关键字static即可。这将摆脱错误。但是如果你想保持类Start的方式,那么你应该在main函数中创建一个Start实例,然后调用该方法。希望有所帮助!
答案 4 :(得分:0)
您正在尝试在其类名上调用方法。你应该创建一个新对象并调用它的方法
public void main(String args[]) {
new Start().gameStart();
System.out.println(menuResult);
}
答案 5 :(得分:0)
Start.gameStart()
指的是public static int gameStart()
的方法,因为Start是类,而不是对象的实例。
如果在对象上声明方法,则需要将其应用于对象的实例而不是其类。
何时使用静态或实例化方法?
mycake.cook();
Cake.throwThemAll();
mycake是Cake的一个实例,以这种方式声明:Cake mycake = new Cake();
Cake是表示对象的类。
如果您对对象,类和实例仍有疑问,我想,您应该阅读一些面向对象的编程课程。
答案 6 :(得分:0)
虽然其他答案都是正确的,但仍然是您无法访问实例的问题 方法直接来自类名,在Java中,所有静态(方法,字段)都与类名绑定,当类加载到内存(堆栈)时,所有静态成员都加载到堆栈,这次实例方法对类不可见。 instance方法将加载到内存中的Heap部分,并且只能通过Object引用访问。