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

标签 java optimization coding-style static

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

static warning

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

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

When enabled, the compiler will issue an error or a warning for methods which are private or final and which refer only to static members.

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

为什么将所有可能的方法都声明为静态方法是件好事?

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

指出一个方法是静态的,我想这表明您不使用任何实例变量,因此可以将其移至 utils 样式类?

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

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

最佳答案

每当你编写一个方法时,你就在一个给定的范围内履行了一个契约。范围越窄,你写错误的机会就越小。

当一个方法是静态的,你不能访问非静态成员;因此,您的范围更窄。因此,如果您不需要并且永远不需要(即使在子类中) 非静态成员来履行您的契约(Contract),为什么要让您的方法访问这些字段?在这种情况下声明方法 static 将使编译器检查您是否使用了您不打算使用的成员。

此外,它将帮助阅读您的代码的人了解契约(Contract)的性质。

这就是为什么在实际实现静态合约时声明方法 static 被认为是好的原因。

在某些情况下,您的方法仅表示与您的类的实例相关的东西,而且它的实现实际上并没有使用任何非静态字段或实例。在这种情况下,您不会标记方法 static

不使用 static 关键字的示例:

  • 一个什么都不做的扩展钩子(Hook)(但可以对子类中的实例数据做一些事情)
  • 一种非常简单的默认行为,可以在子类中自定义。
  • 事件处理程序实现:实现将随事件处理程序的类而异,但不会使用事件处理程序实例的任何属性。

关于java - 将方法声明为静态有什么好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11240178/

相关文章:

Python:使用 CVXOPT 进行二次规划

mysql - 一页上有很多查询,执行时间太长...似乎无法优化它们

actionscript-3 - 您是否知道任何推荐的ActionScript 3样式指南?

C++ "Best"参数传递方式

java - session 不会失效

java字节码编辑器

java - 多设备演示技术

java - 当相机平移时, Sprite 不会跟随 box2d 主体,但如果相机在 libgdx 中是静态的,则效果良好

c++ - 优化稳定的恒定时间数组比较

c++ - 对成员使用下划线后缀是否有益?