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 转换成什么,即使没有人 build 过汽车。但是这个方法(设置一辆特定汽车的效率):

void setMileage(double mpg)

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

(顺便说一下,反之亦然:您有时可能有一个涉及两个 Car 对象的方法,并且仍然希望它是静态的。例如:

Car theMoreEfficientOf(Car c1, Car c2)

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

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

相关文章:

java - Maven 忽略了 Cucumber 测试

java - 数组中的多个对象(java)

java - 什么是NullPointerException,我该如何解决?

interface - 静态上下文错误中使用的非静态方法

go - Go 中静态方法的等价性

java - hadoop mapreduce : java. lang.UnsatisfiedLinkError : org. apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy()Z

java - Spring处理数据库连接异常

java - 类的静态方法之间的同步

php - 有没有办法为静态类方法定义别名?

java - ((Java) 在 if/else if/else 循环之后返回语句?