每当编写方法时,您都将在给定范围内履行合同。范围越窄,编写错误的机会就越小。
当方法是静态的时,您不能访问非静态成员。因此,您的范围更窄。因此,如果您不需要并且永远也不需要(甚至在子类中)非静态成员来履行您的合同,为什么要为您的方法提供对这些字段的访问权限?static在这种情况下声明该方法将使编译器检查您是否使用了不打算使用的成员。
而且,它将帮助阅读您的代码的人们了解合同的性质。
这就是为什么static在实际上实现静态协定时声明一个方法很好的原因。
在某些情况下,您的方法仅表示相对于类实例的某种含义,并且碰巧其实现实际上并未使用任何非静态字段或实例。在这种情况下,您不会标记方法static。
不使用static关键字的示例:
- 一个扩展钩子,什么都不做(但是可以对子类中的实例数据做一些事情)
- 一个非常简单的默认行为意味着可以在子类中进行自定义。
- 事件处理程序的实现:实现会随事件处理程序的类而变化,但不会使用事件处理程序实例的任何属性。



