0

我们什么时候可以将类和方法设为静态?
任何人请帮我举个例子...

4

4 回答 4

0

如果方法不使用类的任何非静态成员,则可以将其设为静态。

如果类只包含静态成员,则可以将其设为静态。

于 2013-01-10T06:52:33.957 回答
0

如果一个方法不改变它的行为基于它的封闭类的不同对象。它可以被标记static

检查Math类。它的所有方法都是static原因,它们的行为仅取决于方法中的参数,并且这些方法不会对类状态进行任何更改。

所有实用程序/辅助方法都可以(应该)标记为static. 即,如果所有对象的行为都相同,为什么要为每个对象提供不同的副本,只需一个副本并让所有对象共享相同的副本。

你也应该检查一下:为什么你不能在 Java 中将一个类声明为静态的?

于 2013-01-10T06:53:45.147 回答
0

当您不需要类实例来调用该方法时。这意味着该方法不依赖于类的任何非静态成员

于 2013-01-10T07:00:18.040 回答
0

静态方法属于类,因此不属于特定实例。如果您从消息调度的角度考虑编程语言,我们可以说过程编程仅提供 1 级消息调度,因为函数的名称与其实际行为相对应。在面向对象编程中,我们有两个级别的消息调度,因为您还必须指定一个对象以及一个函数(方法)的签名。相同的函数可能在不同的对象上表现不同,具体取决于它们的状态(子类覆盖方法等)。相反,静态方法就像一个全局函数,您可以在哪里以您想要的方式执行,并且始终具有相同的行为。

因此,您可以限制静态方法的使用,尽管在某些情况下它们会有所帮助。在单例模式 (http://it.wikipedia.org/wiki/Singleton) 中,需要一个静态方法来检索单例的实例(还需要一个私有静态属性来跟踪它)。

对于那些声称 Singleton 是邪恶的并且您应该始终通过 Google Guice 使用依赖注入的人,Guice 也依赖静态方法来创建注入器 (http://lowcoupling.wordpress.com/2012/12/05/dependency-injection /)。

所以我想最好的答案是你应该总是考虑你所面临的问题是否可以通过注入对象来解决,但在某些情况下使用静态方法是非常合理的。

于 2013-01-10T07:04:18.370 回答