编译器不允许静态方法调用非静态方法。我知道这样做是因为非静态方法通常最终会使用实例变量。
但是拥有一个不使用实例变量的非静态方法是否有意义。如果我们的行为不影响实例状态或不受实例状态的影响,则不应将这种方法标记为静态。
通常,没有。如果该方法不涉及任何实例状态,则没有理由将其绑定到实例。
当然,静态方法不能被继承或覆盖,因此这是您明显希望拥有一个不使用实例状态的实例方法的明显时机。该策略模式就是一个典型的例子。
无论如何,您可能仍将其绑定到实例的另一种情况是,如果这是一个公共API,并且您想象您将来可能希望将该方法绑定到实例状态。在这种情况下,对使用您的API的人的向后兼容性问题可能会使(很难(或不可能))将该静态方法转换为实例方法。