Can not make static reference to non static method?
简而言之。我有两个班。
1 2 3 4 5 6 7 8 |
和
1 2 3 4 5 6 7 8 9 10 11 12 | package rpg; public class Start { int menuResult = 3; public int gameStart() { return menuResult; } public int getMenuResult() { return Start.menuResult; } } |
它不断抛出错误"cannot make static reference to non-static method gamestart()"。我肯定我错过了一些简单的东西,但找不到。谢谢!
您需要创建
1 2 3 4 |
使用类名作为perfix只能访问静态方法。
首先,主要的方法应该是
1 2 3 |
我假设您可以有多个游戏,因此您应该能够启动多个实例,因此您应该创建一个可以创建的非静态类,然后对其执行操作。
要回答原始问题,需要有一个静态变量,该变量具有静态getter和setter。
1 2 3 4 5 6 7 8 9 10 | public class Start { private static int menuResult = 3; public static int gameStart() { return menuResult; } public static int getMenuResult() { return Start.menuResult; } |
1 | public int gameStart() <--- Instance method not static method |
在实例中调用它
1 2 | Start start = new Start(); start.gameStart(); |
最后你的课程应该如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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; } } |
虽然其他答案是正确的,但仍然存在一个问题,即为什么您不能访问实例方法直接从类名,在Java中,所有静态(方法,字段)与类名绑定,当类加载到内存(堆栈)时,所有静态成员都被加载到堆栈,并且这个时间实例方法对于类是不可见的。实例方法将加载到内存中的堆部分,并且只能由对象引用访问。
EDCOX1×3是指一个EDOCX1×4的方法,因为开始是类而不是对象的实例。
如果在对象上声明方法,则需要将其应用于对象的实例而不是其类。
何时使用静态或已声明的方法?
- 声明:每当你需要将方法应用于你所在的对象时。示例:
mycake.cook(); - 静态:当您在方法内部所做的操作与特定对象无关时。示例:
Cake.throwThemAll();
我的蛋糕是蛋糕的一个例子,用这种方式宣布:
cake是表示对象的类。
我想,如果您对对象、类和实例仍有疑问的话,您应该阅读一些面向对象的编程课程。
您正在尝试对其类名调用方法。你应该创建一个新的对象并调用它的方法
如果您需要方法是静态的,只需在函数定义中添加关键字static即可。这样可以消除错误。但是,如果希望保持类的启动方式不变,那么应该在主函数中创建start实例,然后调用该方法。希望有帮助!