当我们可以将类和方法作为静态时?
有人请帮我一些例子......
答案 0 :(得分:0)
如果方法不使用该类的任何非静态成员,则可以使该方法成为静态。
如果一个类只包含静态成员,则可以使它成为静态。
答案 1 :(得分:0)
如果方法没有根据它的封闭类的不同对象改变它的行为。它可以标记为static
。
检查Math
课程。它的所有方法都是static
因为,它们的行为只取决于方法中的参数,而且这些方法不会对类状态做任何改变。
所有实用程序/帮助程序方法都可以(应该)标记为static
。即,如果所有对象的行为相同,为什么要为每个对象设置不同的副本,只需要一个副本,让所有对象共享同一个副本。
你也应该检查一下:Why are you not able to declare a class as static in Java?
答案 2 :(得分:0)
当您不需要类实例来调用该方法时。这意味着该方法不依赖于类的任何非静态成员
答案 3 :(得分:0)
静态方法属于Class,因此不属于特定实例。如果你在编程语言中考虑消息调度,我们可以说程序编程只提供1级消息调度,因为函数的名称对应于它的实际行为。在面向对象编程中,我们有两级消息调度,因为您还必须指定一个对象加上一个函数(方法)的签名。相同的函数可能在不同的对象上表现不同,具体取决于它们的状态(subClass重写方法等)。静态方法就像一个全局函数,您可以在您想要的位置和方式执行,并始终具有相同的行为。
因此,您可以限制静态方法的使用,尽管在某些情况下它们会有所帮助。在Singleton模式(http://it.wikipedia.org/wiki/Singleton)中,需要一个静态方法来检索Singleton的实例(还需要一个私有静态属性来跟踪它)。
对于那些声称Singleton是邪恶的并且你应该总是通过Google Guice使用依赖注入的人,Guice也依赖于静态方法来创建一个注入器(http://lowcoupling.wordpress.com/2012/12/05/依赖注入/).
所以我想最好的答案是你应该总是考虑你所面临的问题是否可以通过注入对象来解决,但是在某些情况下静态方法的使用是非常合理的。