将方法声明为静态方法有什么好处

2022-08-31 10:38:27

我最近一直在查看 Eclipse 中的警告,并遇到了这个警告:

static warning

如果该方法可以声明为静态,它将给出编译器警告。

[编辑]Eclipse 帮助中的确切引用,强调私有和最终:

启用后,编译器将对私有最终方法以及仅引用静态成员的方法发出错误或警告。

是的,我知道我可以关闭它,但我想知道打开它的原因?

为什么将每个可能的方法都声明为静态是一件好事?

这会带来任何性能优势吗?(在移动域中)

指出一个方法是静态的,我想是表明你不使用任何实例变量,因此可以移动到utils样式类吗?

在一天结束时,我应该关闭“忽略”还是应该修复它给我的100多个警告?

您是否认为这只是代码的额外关键字,因为编译器无论如何都会内联这些方法?(有点像你没有声明每个你可以最终的变量,但你可以)。


答案 1

每当您编写方法时,您都会在给定范围内履行合同。范围越窄,编写 Bug 的可能性就越小。

当一个方法是静态的,你就不能访问非静态的成员;因此,您的范围更窄。因此,如果您不需要也永远不需要(即使在子类中)非静态成员来完成您的契约,那么为什么要将这些字段的访问权限授予您的方法呢?在这种情况下,声明该方法将允许编译器检查您是否没有使用您不打算使用的成员。static

此外,它还将帮助阅读代码的人了解合同的性质。

这就是为什么在实际实现静态协定时声明方法被认为是好的。static

在某些情况下,您的方法仅表示相对于类的实例的某些内容,并且碰巧其实现实际上并不使用任何非静态字段或实例。在这种情况下,您不会标记方法 。static

不使用关键字的示例:static

  • 一个不执行任何操作的扩展钩子(但可以对子类中的实例数据执行某些操作)
  • 一个非常简单的默认行为,意味着可以在子类中自定义。
  • 事件处理程序实现:实现将因事件处理程序的类而异,但不会使用事件处理程序实例的任何属性。

答案 2

这里没有优化的概念。

方法是因为您显式声明该方法不依赖于任何包含类的实例,只是因为它不需要。因此,Eclipse警告,如文档中所述:staticstatic

启用后,编译器将对私有或最终方法以及仅引用静态成员的方法发出错误或警告。

如果你不需要任何实例变量,并且你的方法是私有的(不能从外部调用)或最终的(不能被覆盖),那么没有理由让它成为一个普通的方法,而不是一个静态的方法。静态方法本质上更安全,即使只是因为你可以用它做更少的事情(它不需要任何实例,你没有任何隐式对象)。this


推荐