【发布时间】:2012-12-24 12:11:06
【问题描述】:
什么时候我们可以将类和方法设为静态?
任何人请帮我举个例子...
【问题讨论】:
标签: java .net oop static static-methods
什么时候我们可以将类和方法设为静态?
任何人请帮我举个例子...
【问题讨论】:
标签: java .net oop static static-methods
当您不需要类实例来调用该方法时。这意味着该方法不依赖于类的任何非静态成员
【讨论】:
如果方法不使用类的任何非静态成员,您可以将其设为静态。
如果类只包含静态成员,则可以将其设为静态。
【讨论】:
如果一个方法不改变它的行为基于它的封闭类的不同对象。可以标记为static。
检查Math 类。它的所有方法都是static 原因,它们的行为仅取决于方法中的参数,并且这些方法不会对类状态进行任何更改。
所有实用程序/辅助方法都可以(应该)标记为static。即如果所有对象的行为都相同,为什么要为每个对象提供不同的副本,只需一个副本并让所有对象共享同一个副本。
你也应该检查一下:Why are you not able to declare a class as static in Java?
【讨论】:
静态方法属于类,因此不属于特定实例。如果您从消息调度的角度考虑编程语言,我们可以说过程编程仅提供 1 级消息调度,因为函数的名称与其实际行为相对应。在面向对象编程中,我们有两个级别的消息调度,因为您还必须指定一个对象以及函数(方法)的签名。相同的函数可能在不同的对象上表现不同,具体取决于它们的状态(子类覆盖方法等)。相反,静态方法就像一个全局函数,您可以在哪里以您想要的方式执行,并且始终具有相同的行为。
因此,您可以限制静态方法的使用,尽管在某些情况下它们会有所帮助。在 Singleton 模式 (http://it.wikipedia.org/wiki/Singleton) 中,需要一个静态方法来检索 Singleton 的实例(还需要一个私有静态属性来跟踪它)。
对于那些声称 Singleton 是邪恶的并且您应该始终通过 Google Guice 使用依赖注入的人,Guice 也依赖静态方法来创建注入器 (http://lowcoupling.wordpress.com/2012/12/05/依赖注入/)。
所以我想最好的答案是您应该始终考虑是否可以通过注入对象来解决您面临的问题,但是在某些情况下使用静态方法是非常合理的。
【讨论】: