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

标签 java static-methods static-members

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

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

Avoid using an object to access a class (static) variable or method. Use a class name instead. For example:

classMethod();             //OK 
AClass.classMethod();      //OK
anObject.classMethod();    //AVOID!

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

最佳答案

通过类变量,我假设您指的是静态变量。

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

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

Thread.sleep(1000);

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

现在如果我们这样做:

Thread t = new Thread(...);
t.sleep(1000);

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

关于java - 为什么在 Java 中使用类名而不是对象来访问类方法或变量更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11245092/

相关文章:

Java Web 服务请求-响应问题

java - 正在解析: SunCertPathBuilderException: unable to find valid certification path to requested target

java - String[] 无法转换为 String

c++ - VS2010 中的链接器错误(解决方案和静态方法中有 2 个项目)

html - 删除 HTML 使用 Java 删除对齐方式

c++ - 在静态函数中返回一个对象而不是构建它有什么好处?

c++ - 初始化包含数组的类的静态成员?

c++ - C++ 中的隐式静态变量?

c++ - 混合 constexpr 声明和 const 定义

java - 生产中的 Spring Boot API 模拟