当前位置: 首页 > 面试题库 >

Java:何时使用静态方法?

葛成双
2023-03-14
问题内容

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

例如

Obj x = new Obj();
x.someMethod

要么

Obj.someMethod

我很困惑!


问题答案:

一个经验法则:问自己“即使尚未构建Obj,调用此方法是否有意义?” 如果是这样,那肯定是静态的。

因此,在一个类中,Car你可能有一个double convertMpgToKpl(double mpg)静态的方法,因为即使没有人制造过汽车,也可能想知道35mpg转换为什么。但是void setMileage(double mpg)(设置一辆特定Car的效率)不能是静态的,因为在构造任何Car之前都无法调用该方法。

(顺便说一句,情况并非总是如此:你有时可能有一个涉及两个Car对象的方法,但仍然希望它是静态的。例如Car theMoreEfficientOf( Car c1, Car c2 )。尽管可以将其转换为非静态版本,但有人会争论说,既然不是哪个Car更为重要的“特权”选择,你不应该强迫调用者选择一个Car作为要在其上调用该方法的对象。这种情况在所有静态方法中所占的比例很小.

仅在以下情况下定义静态方法:

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


 类似资料:
  • 问题内容: 我想知道何时使用静态方法?假设我有一个带有几个getter和setter的类,一个或两个方法,并且我希望这些方法只能在该类的实例对象上调用。这是否意味着我应该使用静态方法? 例如 要么 (这是静态方式吗?) 我很困惑! 问题答案: 一个经验法则:问自己“即使尚未构建Obj,调用此方法是否有意义?” 如果是这样,那肯定是静态的。 因此,在一个类中,你可能有一个静态的方法,因为即使没有人制

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

  • 我不知道什么时候在程序中使用一个静态/非静态变量。 我理解非静态/静态变量之间的区别,但我只是不知道何时使用每一个变量。那么在上面的代码中,为什么函数不能是静态的呢?(什么时候应该是静态的?)

  • 问题内容: 我想调用静态的方法。我得到了类型的对象,但是我无法创建该类的实例,也无法调用该方法。 问题答案: 如果方法是私有使用而不是。并调用方法对象。

  • 问题内容: 以下是有关如何使Java通用类将单个项目附加到数组的代码段。如何使appendToArray成为静态方法。在方法签名中添加static会导致编译错误。 问题答案: 您唯一可以做的就是将您的签名更改为 重要细节: 返回值之前的泛型表达式始终会引入(声明)新的泛型类型变量。 另外,类型()和静态方法()之间的类型变量永远不会相互干扰。 因此,这意味着什么:如果方法不是,则我的答案将隐藏。A

  • 问题内容: 尝试在静态类中调用非静态方法时遇到错误。 无法从类型播放中静态引用非静态方法methodName() 我不能使该方法静态,因为这也给我一个错误。 此静态方法无法从xInterface隐藏实例方法 有什么办法可以在另一个静态方法中轮回调用非静态方法?(这两种方法位于单独的包和单独的类中)。 问题答案: 从静态方法中调用非静态方法的唯一方法是使类的实例包含非静态方法。根据定义,非静态方法是