我正在完成我的任务,并遇到了一些错误。在一个班级我有这个方法:
public class Class1{
public static boolean winningRecord(){
final int WINNING_RECORD;
return Class2.getPoints() > WINNING_RECORD;
}
}
class Class2{
int wins = 0;
public int getPoints(){
return wins; //More to it but to keep it simple I'll leave that out
}
}
现在我收到错误“非静态方法无法从静态上下文中引用...”,所以我将getPoints()作为静态方法,使变量也是静态的,并且它可以工作。但是在打印对象的另一种方法中,它不起作用(我相信这是因为static关键字)。
所以我的问题是,有一种方法可以在不创建第二个类的实例的情况下调用方法吗?这是我的一般想法代码,它应该让你了解正在发生的事情,如果没有,我会添加更多。
答案 0 :(得分:13)
java中的一个关键概念是实例化的想法。类定义包含一种类型对象的所有规则。对象的每个实例都遵循相同的规则。例如,如果我定义
class Ball {
public void bounce() {
// lots of code here
}
}
然后系统会有Ball
个名为bounce
如果我想要两个球......
public class Main {
public static void main(String args[]) {
Ball beachBall = new Ball();
Ball soccerBall = new Ball();
我可以随心所欲地反弹他们
beachBall.bounce();
beachBall.bounce();
soccerBall.bounce();
beachBall.bounce();
但我不能说
Ball.bounce();
因为这会给我的系统留下“哪个球?”的问题。
static
方法和变量与特定实例无关。
例如:
class Werewolf {
static boolean fullMoon = false;
static void setFullMoon(boolean isVisible) {
fullMoon = isVisible;
// code code code
}
void eatPerson(Person p) {
// code code code
}
}
静态方法应用于所有狼人,因此在课堂上调用:
Werewolf.fullMoon(true);
应用于特定狼人的非静态(实例)方法,因此在实例上调用它。
jeff.eatPerson(chuck);
杰夫是狼人。查克是他吃的人。 尽量忽略残酷的评论。我们都来自某个地方。
答案 1 :(得分:0)
在您的代码中,由于静态键工作,winningRecord()
特定于类Class1
本身。
而Class2中的getPoints()
特定于类Class2
无法从静态上下文访问非静态方法。
答案 2 :(得分:0)
除非Wins是静态的,否则getPoints不能是静态的。如果获胜是静态的,那么将只有一个获胜者副本,整个应用程序都共享。您需要确定所需的胜利副本数。 (“单身一人,只有一个类来存储一个