静态方法是否应该与实例方法 类 分开?

Should static methods be separated from Classes with instance methods?

作为一般约定,是否应该将静态方法从具有实例方法的 class 中分离到另一个 class 中?

你的理由也有例子吗?

这可能是一个重复的问题,但是不,静态方法具有非常具体的好处,这些好处在实例化为对象的 类 中通常很有价值。

没有这样的约定。这完全取决于你的情况。一些 class 可能确实需要静态和非静态成员的混合。

但有时会在某些 java 项目中看到 Constatns.java/ Utils.java class 的使用。您可能会发现 -

public static final double PI = 3.1416;
public static getArea(double r){}

此 class 包含一些最终静态 属性 和一些最终方法。这些 class 的目的是在整个项目中提供一些常量或实用方法。

肯定的答案将由用例决定,但没有这样的约定。最多你有一些 Utility class 可能有一堆静态方法被其他 classes 用作辅助方法。例如,测试一个字符串是否为电子邮件或从电子邮件中提取用户名等。

没有一般约定规定静态方法必须与非静态方法分开。事实上,如果这两种方法彼此足够相关,那么将这些方法分开是违反直觉的。

回想一下静态方法(和字段)有哪些用例:它们 methods/fields 可以在没有特定 class 实例的情况下使用。这通常意味着它们持有有价值的元数据或执行与其 class 实例相关的有用操作,但不需要直接实例化 class.

例如,Integer。它具有静态 [final] 字段 MAX_VALUEMIN_VALUE。由于这两个字段都包含在实例化之间不会更改的固定信息,因此必须实例化一个 Integer 来获取此信息是没有意义的。

Integer 也有有用的操作 parseInt,它将 String 转换为 int。我们不应该要求 Integer 的实例从 String 转换为 int 特别是 如果我们不将它放入的实例Integer.

总体约定是将相关方法放在一起,无论它们是否是静态的。您可以在某些 Java 库 classes 中看到更清晰的示例,例如 Integer.

在编写 API 或框架时,将所有静态方法放在单独的 class 中会很有用。 Collections class 就是一个例子。 java.lang.Math 或 java.lang.System 是另一个。

通常在以下场景定义静态方法:

  • 在编写实用程序时 classes。
  • 如果该方法不使用任何实例变量。
  • 如果任何操作独立于实例创建。
  • 如果您确定永远不会更改或覆盖方法的定义。由于无法覆盖静态方法。

看这里 -