如何在java中访问对象的静态变量?
我正在编写一个程序,其中必须包含两个静态变量。在创建一个包含10个对象的数组之前,我将它们包含在构造函数中。后来,我尝试通过以下方式实现其中一个静态变量:如何在java中访问对象的静态变量?,java,eclipse,Java,Eclipse,我正在编写一个程序,其中必须包含两个静态变量。在创建一个包含10个对象的数组之前,我将它们包含在构造函数中。后来,我尝试通过以下方式实现其中一个静态变量: if (finalScore >= students.get(0).minA){ finalLetterGrade = "A"; aCounter++; //(student.get(0).minA = 90) 该程序本应工作正常,但由于以下错误消息,Ecipse不允许我保存该程序: “
if (finalScore >= students.get(0).minA){
finalLetterGrade = "A";
aCounter++;
//(student.get(0).minA = 90)
该程序本应工作正常,但由于以下错误消息,Ecipse不允许我保存该程序:
“静态字段ClassGrade.minA应在
“静态方式”
错误会在我提供的代码的第一行弹出。有人能给我解释一下在java中访问对象静态变量的正确方法吗,或者至少能告诉我如何通过此错误消息保存\运行我的程序吗?您会得到警告,因为静态方法应该通过其容器类本身(Classname.staticMethod()访问)
),而不是通过它的一个实例。改变
if (finalScore >= students.get(0).minA)
到
您会收到警告,因为应该通过容器类本身(Classname.staticMethod()
)而不是通过其实例访问static方法。改变
if (finalScore >= students.get(0).minA)
到
static表示整个类只有一个变量/方法。可以创建无限多的对象,但值不会更改。因此,您应该通过类而不是类的实例来访问它:
ClassGrade.minA
而不是students.get(0)。minA
static表示整个班级只有一个变量/方法。可以创建无限多的对象,但值不会更改。因此,您应该通过类而不是类的实例来访问它:
ClassGrade.minA
而不是students.get(0)。minA
只是为了您的理解,我想解释一下静态变量可以/不能使用的上下文
假设我们有一个课堂演示
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);
}
}
现在这个类有一个静态变量计数器
和成员变量编号
。类似地,它有两种方法:静态方法printCounter()
和非静态方法printNumber()
现在让我们来看看定义
成员变量:属于特定对象的变量
静态变量:属于特定类的变量。这意味着该类的每个对象都可以访问该变量。因此,变量属于所有对象
<>先考虑<代码> PrimeNoUnter()方法。您将通过Demo类的对象调用此方法,如Demo=newdemo()
。此方法可以访问属于该对象的成员变量。它还可以访问静态变量,因为静态变量属于所有对象。因此,可以在成员函数内访问静态变量
现在让我们考虑<代码> PrimTror()/<代码>方法。您将通过类
Demo.printCounter()
访问此方法。现在想象一下,我们之前创建了3个演示对象,每个对象的number
值不同。所以,如果我尝试在printCounter()方法中访问number
,它将访问哪个值?没有一个因为有多个值。因此,无法从静态函数访问成员变量,这表明存在编译错误。为了便于理解,我想解释一下静态变量可以/不能使用的上下文
假设我们有一个课堂演示
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);
}
}
现在这个类有一个静态变量计数器
和成员变量编号
。类似地,它有两种方法:静态方法printCounter()
和非静态方法printNumber()
现在让我们来看看定义
成员变量:属于特定对象的变量
静态变量:属于特定类的变量。这意味着该类的每个对象都可以访问该变量。因此,变量属于所有对象
<>先考虑<代码> PrimeNoUnter()方法。您将通过Demo类的对象调用此方法,如Demo=newdemo()
。此方法可以访问属于该对象的成员变量。它还可以访问静态变量,因为静态变量属于所有对象。因此,可以在成员函数内访问静态变量
现在让我们考虑<代码> PrimTror()/<代码>方法。您将通过类
Demo.printCounter()
访问此方法。现在想象一下,我们之前创建了3个演示对象,每个对象的number
值不同。所以,如果我尝试在printCounter()方法中访问number
,它将访问哪个值?没有一个因为有多个值。因此,无法从静态函数访问成员变量,它显示编译错误。如果minA
是静态字段,则警告希望您将students.get(0).minA
更改为ClassGrade.minA
。顺便说一句,这只是一个警告:它不会阻止您保存程序。如果minA
是静态字段,则警告希望您更改students.get(0).minA
为ClassGrade.minA
。顺便说一下,这只是一个警告:它不会阻止你保存你的程序。