何时使用静态方法

2022-08-31 03:57:58

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

例:

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

...艺术

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

我很困惑!


答案 1

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

因此,在类中,您可能有一个方法:Car

double convertMpgToKpl(double mpg)

...这将是静态的,因为人们可能想知道35mpg转换为什么,即使没有人构建过.但是这种方法(它设置了一个特定方法的效率):CarCar

void setMileage(double mpg)

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

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

Car theMoreEfficientOf(Car c1, Car c2)

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


答案 2

仅在以下方案中定义静态方法:

  1. 如果您正在编写实用程序类,并且不应更改它们。
  2. 如果该方法未使用任何实例变量。
  3. 如果任何操作不依赖于实例创建。
  4. 如果存在一些可由所有实例方法轻松共享的代码,请将该代码提取到静态方法中。
  5. 如果您确定永远不会更改或覆盖该方法的定义。由于静态方法不能被覆盖。

推荐