我试图了解类的静态数据成员在Java中的行为。由于静态成员不是任何实例的一部分,因此它们被同一类的所有实例共享。 我想出的是:
问题:为什么使用对象引用变量来访问它们,因为在某些语言(例如C#,C ++等)中是不允许的,为什么可以从非静态方法访问它们?静态数据成员的概念是多余的还是相反的?
以下是我的代码,使我不禁要问这个问题。
pubic class ClassWithStaticMember{
public static int _variable;
static{
_variable = 2; // Default Value will be 2
}
public static void modifyVariable(){ // Static Method that Modifies _variable
_variable = 3
}
public void NSmodifyVariable)(){ // Non-Static Method that Modifies _variable
_variable = 6;
}
public static void printVariable(){ // Static Method that prints _variable
System.out.println("Static Data-Member _variable: " + _variable);
}
}
public class MainClass {
public static void main (String[] args){
ClassWithStaticMember.printVariable(); //Prints _variable = 2 that was initialized in static block
ClassWithStaticMember._variable = 9;
ClassWithStaticMember.printVariable(); //Prints _variable = 9
ClassWithStaticMember.modifyVariable();
ClassWithStaticMember.printVariable(); //Prints _variable = 3
ClassWithStaticMembers _Instance = new ClassWithStaticMember();
_Instance._variable = 4; // Changes _variable to 4
_Instance.printVariable(); //Prints _variable = 4
_Instance.NSmodifyVariable();
_Instance.printVariable(); //Prints _variable = 6
}
}
我希望不要“通过非静态方法”和“通过对象引用变量”访问静态成员,但是Java允许这样做。