Java中的静态变量
根据Java,静态变量可以通过类名访问,但即使Java不提示它们也可以通过类对象访问静态变量,并且它给出了相同的答案。
我知道只有一个变量副本,它的值对所有对象和其他东西都是一样的。 为什么Java建议使用类名而不是类对象?
因为它可能会让人迷惑! 静态成员不存在动态分派。
看看这个令人困惑的代码:(可能是语法错误;我的Java很生疏)
public abstract class Singer {
    public static void sing() {
        System.out.println("Singing");
    }
}
public class Soprano extends Singer {
    public static void sing() {
        System.out.println("Singing in the range of C4-A5");
    }
}
public class MyDriver {
    public static void main(String[] argv) {
        Singer  mySoprano1 = new Soprano();
        Soprano mySoprano2 = new Soprano();
        mySoprano1.sing();
        mySoprano2.sing();
    }
}
  看着MyDriver这很让人困惑,因为它看起来像sing方法是多态的,所以输出应该是...... 
Singing in the range of C4-A5
Singing in the range of C4-A5
  ...因为soprano1和soprano2都是Soprano - 不是Singer 。 
但是,唉,输出实际上是:
Singing
Singing in the range of C4-A5
  为什么?  因为静态成员没有动态调度,所以声明的类型mySoprano1决定了sing方法被调用......和声明的类型soprano1是Singer ,不是Soprano 。 
有关更多信息,请参阅Java Puzzlers一书中的“我得到的所有东西都是静态的”。
  如果您编写MyClass.staticVariable比myObject.staticVariable更自我记录。  它告诉查看staticVariable是MyClass属性的代码的人,而不是作为类的特定实例的myObject 。 
  我可以想到的一点是,如果您使用Class Reference而不是Object,则JVM不需要创建new Object来访问该静态变量。  这是一个很好的性能编程实践。 
