Java静态方法的标准是什么?

3

有人告诉我:

如果您正在使用Eclipse并且在方法中看不到任何蓝色单词(即成员变量),则只要参数(如果有)是基本类型或(在对象引用的情况下)是不可变和/或线程安全,那么这些方法应该真正是静态方法。

除此之外,Java开发人员在决定实例方法是否真的应该成为静态方法时,还有其他标准吗?

4个回答

11
简单来说,如果它是纯粹的“助手/函数”,不会修改对象的内部状态,则它是静态方法的一个好候选。

6

除非您计划创建子类并覆盖该方法,否则请不要这样做。

只要参数(如果有任何)是原始类型,或者(在对象引用的情况下)是不可变和/或线程安全的,就没有问题。

我不明白为什么这很重要。任何线程安全的考虑与方法是静态还是非静态都没有关系。具有仅包含不可变参数(也不会干扰类的静态字段)的静态方法是线程安全的。如果参数不是不可变的,并且方法更改它们并导致不安全的线程,则将其设置为实例方法也无济于事。


1
如果您不需要一个对象的实例来调用方法,那么它应该是静态的。也就是说:如果您只使用参数而不使用对象的成员。通常这些都被收集在实用程序或帮助类中,这些类永远不会被实例化(通过声明私有默认构造函数来保护)。
附:关于“蓝色字体”:您应该始终使用this.来访问成员变量,而不要依赖于您的IDE,因为一旦使用简单的查看器/编辑器,代码将变得非常难读。

如果您不需要一个实例,也不想进行子类化(我猜这是需要实例的特殊情况:用于方法调度),那么可以这样做。 - Thilo
我不赞成总是使用this.。我个人认为这会降低代码的可读性并增加冗余,所以我仅在确实需要时才使用this - Mark Rotteveel

0
任何你计划在所有实例中全局使用的函数都可以被定义为静态函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接