我正在开发一个程序,我必须包含两个静态变量。在创建十个对象的数组之前,我将它们包含在我的构造函数中。后来,我尝试以下列方式实现其中一个静态变量:
if (finalScore >= students.get(0).minA){
finalLetterGrade = "A";
aCounter++;
//(student.get(0).minA = 90)
该程序应该可以正常工作,但是由于以下错误消息,Ecipse不允许我保存程序: “应该在一个。中访问静态字段ClassGrade.minA 静态方式“ 错误会在我提供的代码的第一行弹出。任何人都可以向我解释在java中访问一个对象的静态变量的正确方法,或者至少建议我如何通过这个错误消息并保存\运行我的程序?
答案 0 :(得分:2)
您收到警告,因为静态方法应该通过其容器类本身(Classname.staticMethod()
)访问,而不是通过其中一个实例访问。变化
if (finalScore >= students.get(0).minA)
到
if (finalScore >= ClassGrade.minA)
答案 1 :(得分:1)
static 表示您对整个类只有一个变量/方法。您可以创建无限量的对象,但值不会发生变化。因此,您应该通过类而不是类的实例来访问它:
ClassGrade.minA
代替students.get(0).minA
答案 2 :(得分:1)
只是为了您的理解想解释静态变量可以/不能使用的上下文。
让我们说我们有一个课程演示。
public class Demo {
int number;
static int counter;
public static void printCounter(){
System.out.println(number); // Shows compilation error.
System.out.println(counter);
}
public void printNumber(){
System.out.println(number);
System.out.println(counter);
}
}
现在这个类有一个静态变量counter
和成员变量number
。同样,它有2个方法静态方法printCounter()
和非静态方法printNumber()
现在让我们按照定义
成员变量:属于特定对象的变量
静态变量:属于特定类的变量。这意味着该类的每个对象都可以访问该变量。因此变量属于所有对象。
让我们先考虑printNumber()
方法。您将通过像Demo demo = new Demo()
这样的Demo类的对象调用此方法。此方法可以访问属于该对象的成员变量。它还可以访问静态变量,因为静态变量属于所有对象。因此,可以在成员函数内访问静态变量。
现在让我们考虑printCounter()
方法。您将通过Demo.printCounter()
之类的类访问此方法。现在假设我们之前创建了3个Demo对象,并且每个对象的number
值都不同。因此,如果我尝试在printCounter()方法中访问number
,它将访问哪个值?没有。因为有多个值。因此,无法从静态函数访问成员变量,它显示编译错误。