为什么在 Java 中使用类名而不是对象来访问类方法或变量更好?

Sat*_*hya 1 java static-methods static-members

我正在阅读http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-137265.html#587的 Java 代码约定。

其中,他们提到我们应该避免使用对象来访问类变量或方法,而应该使用类名。

避免使用对象访问类(静态)变量或方法。请改用类名。例如:

classMethod();             //OK 
AClass.classMethod();      //OK
anObject.classMethod();    //AVOID!
Run Code Online (Sandbox Code Playgroud)

在术语、性能或其他方面是否有特殊原因?

Tud*_*dor 5

我认为类变量指的是静态变量。

应避免通过实例变量使用静态变量/方法,因为这会让读者感到困惑。由于只能使用实例来访问实例变量,因此阅读通过实例调用静态方法的代码可能会让读者对发生的情况感到困惑。

想象一下这种情况,使用Thread.sleep,它是一个静态方法:

Thread.sleep(1000);
Run Code Online (Sandbox Code Playgroud)

由于该方法是静态的,并且我们通过类名调用它,因此读者可以直观地推断出效果是使当前线程进入睡眠状态。

现在如果我们这样做:

Thread t = new Thread(...);
t.sleep(1000);
Run Code Online (Sandbox Code Playgroud)

现在哪个线程进入睡眠状态?当前的这一点“显然”。不知道睡眠如何工作的人可能会认为子线程以某种方式进入睡眠状态。