另外,静态方法比实例方法有任何性能优势吗?
我最近遇到了以下内容:http://www.cafeaulait.org/course/week4/22.html:
方法何时应该是静态的?
既不读取也不写入实例字段
独立于对象的状态
接受参数的数学方法,将算法应用于这些参数,并返回值
用于代替构造函数的工厂方法
我对Stack Overflow社区的反馈非常感兴趣.
当方法不是实例的一部分时,使方法静态.不要为微观优化而烦恼.
您可能会发现有许多私有方法可能是静态的,但您总是从实例方法(或彼此)调用.在那种情况下,这并不重要.但是,如果您希望实际能够测试代码,并且可能从其他地方使用它,您可能需要考虑在不同的,不可实例化的类中创建这些静态方法.
方法是否是静态的更多是设计考虑而不是效率.静态方法属于一个类,其中非静态方法属于一个对象.如果您有Math类,则可能有一些静态方法来处理加法和减法,因为这些是与Math相关的概念.但是,如果你有一个Car类,你可能会有一些非静态方法来改变齿轮和转向,因为它们与特定的汽车相关联,而不是一般的汽车概念.
静态方法的另一个问题是,为它们编写单元测试是非常痛苦的 - 至少在Java中.你不能以任何方式模拟静态方法.谷歌测试博客上有一篇关于此问题的帖子.
我的经验法则是只有在没有外部依赖关系(如数据库访问,读取文件,电子邮件等)时才编写静态方法,以使它们尽可能简单.