Java静态混乱

asb*_*asb 3 java static

我正在使用Java; 我之前使用过C++.我正在考虑Java中的静态用法.如果我在类中创建静态方法和变量,为什么我也可以通过对象访问它们?

例:

class Test{
  static int count=0;
  int id;
  static void updatec(){
    count++
   }
}

class TestMain
{
   public static void main(String args[])
   {
         Test.count=1;
         Test t = new Test();
         t.count=5; // Valid WHY ?????
   }
}
Run Code Online (Sandbox Code Playgroud)

为什么允许这样做?Java的网站说我们不应该使用obj.static方法/变量.
为什么允许这样做?

Col*_*ert 7

静态并不意味着该字段仅适用于该类.它意味着它为类及其所有实例.

在这个例子中,类变量origin的类的Point被引用都使用类名作为限定,在Point.origin,和使用类型的变量字段访问表达式(§15.11),如在p.originq.origin.这两个访问原点类可变访问相同的对象的方法,通过以下事实引用相等表达式(的值证明§15.21.3):
q.origin==Point.origin为真

但是,你是对的它通常是一个坏主意,是指从一个非静态上下文静态字段/方法/类,它可以混淆开发商.


资源: