方法何时应该是静态的?

Sco*_*nce 33 language-agnostic static

另外,静态方法比实例方法有任何性能优势吗?

我最近遇到了以下内容:http://www.cafeaulait.org/course/week4/22.html:

方法何时应该是静态的?

  1. 既不读取也不写入实例字段
  2. 独立于对象的状态
  3. 接受参数的数学方法,将算法应用于这些参数,并返回值
  4. 用于代替构造函数的工厂方法

我对Stack Overflow社区的反馈非常感兴趣.

Tom*_*ine 22

当方法不是实例的一部分时,使方法静态.不要为微观优化而烦恼.

您可能会发现有许多私有方法可能是静态的,但您总是从实例方法(或彼此)调用.在那种情况下,这并不重要.但是,如果您希望实际能够测试代码,并且可能从其他地方使用它,您可能需要考虑在不同的,不可实例化的类中创建这些静态方法.


Kyl*_*nin 19

方法是否是静态的更多是设计考虑而不是效率.静态方法属于一个类,其中非静态方法属于一个对象.如果您有Math类,则可能有一些静态方法来处理加法和减法,因为这些是与Math相关的概念.但是,如果你有一个Car类,你可能会有一些非静态方法来改变齿轮和转向,因为它们与特定的汽车相关联,而不是一般的汽车概念.


mar*_*ira 12

静态方法的另一个问题是,为它们编写单元测试是非常痛苦的 - 至少在Java中.你不能以任何方式模拟静态方法.谷歌测试博客上一篇关于此问题帖子.

我的经验法则是只有在没有外部依赖关系(如数据库访问,读取文件,电子邮件等)时才编写静态方法,以使它们尽可能简单.