java - 何时使用静态方法

标签 java static-methods

我想知道什么时候使用静态方法?假设我有一个带有几个 getter 和 setter 的类,一个或两个方法,并且我希望这些方法只能在类的实例对象上调用。这是否意味着我应该使用静态方法?

例子:

Obj x = new Obj();
x.someMethod();

...或:

Obj.someMethod(); // Is this the static way?

我很困惑!

最佳答案

一个经验法则:问问自己“调用此方法是否有意义,即使尚未构造任何对象?”如果是这样,它肯定应该是静态的。

所以在 Car 类中你可能有一个方法:

double convertMpgToKpl(double mpg)

...这将是静态的,因为人们可能想知道 35mpg 转换成什么,即使没有人制造过 Car。但是这个方法(设置一个特定Car的效率):

void setMileage(double mpg)

...不能是静态的,因为在构造任何 Car 之前调用该方法是不可想象的。

(顺便说一句,反过来并不总是正确的:您有时可能有一个涉及两个 Car 对象的方法,但仍然希望它是静态的。例如:

Car theMoreEfficientOf(Car c1, Car c2)

虽然这可以转换为非静态版本,但有些人会争辩说,由于没有“特权”选择哪个 Car 更重要,所以你不应该强制调用者选择一个 Car 作为您将调用该方法的对象。不过,这种情况只占所有静态方法的一小部分。

关于java - 何时使用静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2671496/

相关文章:

python - 返回其类实例的静态方法

java - 从大到小排序列表

java - 二维对象数组

java - OpenJDK 的 vm 设置了哪些系统属性来区别于 Sun/Oracle 的 vm?

node.js - 在保存后中间件中使用静态方法

java - 全静态方法和应用单例模式有什么区别?

java - 删除以前的字符串条目

Java : Does Locale affect the Formatter for JFormattedTextField

c++ - 为什么不能将重载的运算符定义为类的静态成员?

java - 使用自定义类加载器加载静态方法