【发布时间】:2013-01-12 02:32:24
【问题描述】:
我正在做我的任务,但遇到了一些错误。在一个类中,我有这种方法:
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() 设为静态方法,也将变量设为静态,并且它可以工作。但是在另一种打印出 Objects 的方法中它不起作用(我相信这是因为 static 关键字)。
所以我的问题毕竟有没有一种方法可以在不创建第二个类的实例的情况下调用方法?这是我的一般想法代码,它应该让您了解发生了什么,如果没有,我会添加更多内容。
【问题讨论】:
-
getPoints不能是静态的,除非wins是静态的。如果wins是静态的,那么整个应用程序将只共享一个wins的副本。您需要决定需要多少份wins。 (而且“除了单例,拥有一个只用于存储一个静态数据值的类通常很愚蠢。) -
您需要详细说明“但是在另一种打印出 Objects 的方法中它不起作用(我相信这是因为 static 关键字)。”使 getPoints() 静态本身不应该是一个问题。
-
我有另一种打印出对象的方法,但是当它打印出变量值时,它只是为每个对象输出相同的东西。
-
你问的纯粹是对OOPS基础知识的理解。
-
Class2 有一个名为 wins 的实例变量。
getPoints()返回该实例变量,如果您没有 Class2 的实例,那么静态调用该方法将毫无意义,因此您收到错误的原因。就像@JonSkeet 所说,熟悉static的含义。它将获得丰厚的回报。
标签: java