Java中静态变量的行为如何?我在下面解释了我的问题

时间:2019-05-01 13:02:20

标签: java class static class-members

我试图了解类的静态数据成员在Java中的行为。由于静态成员不是任何实例的一部分,因此它们被同一类的所有实例共享。 我想出的是:

  1. 可以使用点引用运算符使用对象引用变量或ClassName来访问它们,或者如果从同一类进行访问,则可以直接访问它们。
  2. 记住(1),无论方法是静态的还是非静态的,都可以从方法中访问它们。

问题:为什么使用对象引用变量来访问它们,因为在某些语言(例如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允许这样做。

0 个答案:

没有答案