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

Row*_*wan -5 java methods modifiers

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

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

Gho*_*ica 6

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

  • static导致不同类之间的直接耦合.
  • 更重要的是:静态方法没有多态性.而多态是OO编程的精髓!
  • 它不仅会影响您的代码库; 它也可以使(单位)测试(更多)更难.

换句话说:默认情况下,您努力不使用静态.有些情况下有意义; 但你必须仔细考虑那些.

或者,给我个人两分钱:如果静态是"更好的答案",每个人仍然会在Pascal中编码,并声称命令式编程是软件工程的银弹.

但要回答"其他"问题:"为什么我们需要静态呢?"

仅仅因为它有时候方便有用.当你转向java"系统类"; 如集合对象,你会发现合理数量的"有用"功能.这样就可以维护软件质量的其他重要属性; 喜欢:单一责任原则.例如,有一个中央实施是有道理的sort(); 而不是直接对集合上的"附加""可以排序"行为.