为什么不是所有 Java 方法都是静态的?

Why aren't all Java methods static?

我只是在这里检查我的推理,因为我想我已经知道答案了。有人问我:无论我有多少个特定 class 的实例,一个给定的方法肯定会在每个对象中有相同的操作。那么,为什么 Java 开发人员发明了方法的静态修饰符?我们可以将其与静态变量进行对比。当然,在这里,每个对象对于给定的字段可以有不同的值。

我的回答是,不,给定的方法在 class 的每个实例中不会有相同的操作。例如,setter 和 getter 在 class 的每个实例中以 "identical" 方式运行,但它们的输出确实取决于 class.

的实例

相当宽泛的问题;但这里有各种简单的事实: 因为 静态 被认为是 异常 关于 "good OO" 原则:

  • static导致不同类.
  • 之间直接耦合
  • 更重要的是:没有静态方法的多态性。而多态性是面向对象编程的精髓
  • 而且它不仅会影响您的代码库,还会影响您的代码库。它还可以使(单元)测试(更加)困难。

换句话说:您努力不默认使用 static。在某些情况下这是有道理的;但你必须仔细考虑这些。

或者,给我个人的两分钱:如果 static 将是 "better answer",每个人仍然会使用 Pascal 编码并声称 势在必行 编程是软件工程的灵丹妙药。

但要在这里回答 "other" 问题:"why do we need static at all then"?

只是因为它有时很方便而且很有帮助。当你转向 java "system classes";例如 Collections or Objects 你会发现 合理的 数量的 "helpful" 功能。这允许维护 other 软件质量的重要属性;喜欢:单一职责原则。例如,有 one 中央实现 sort() 是有道理的;而不是直接对集合进行 "additiony" "can be sorted" 行为。