将方法声明为静态方法有什么优点,除了可以在不实例化类的情况下调用方法吗?除了调用方便之外,java中是否有使用静态方法/函数的方法?
回答
不需要实例化类来调用方法本身就是一个优点。考虑一些方法库,比如java.lang.Math。
静态方法也用作工厂方法 - 您调用静态方法来获取对象 - 通常是某个接口的实现。这个想法是,该方法可以根据您传递的参数找出为您建立的具体实现。如果你必须有一个对象实例,然后才能调用这样的方法,那么你可以有鸡与鸡蛋,或者创建第二个类的实例,只是调用工厂方法来给你第一个实例。
您可能还会发现this StackOverflow question on whether or not methods should be static by default感兴趣,特别是接受的答案。
使用static
方法有很多原因。这里有几个例子:
- 设置一个参数是相关的类的每个实例,如时间格式(24小时对AM/PM),当你有很多的时钟。
- 提供与更大/其他数据无关的单一操作(如Math类,如QuantumMechanic提到的)。
- 限制使用一个实例(singleton),并从不同的地方提供对它的操作。
最重要的是,即使你OO编程,这并不意味着,每一个东西都是一个对象,每个方法需要一个对象上调用,有些方法是独立的,并迫使OO模式他们似乎我像一个不好的做法。我甚至不记得我编写的一个应用程序没有使用静态方法。
即使同意你,我坚信静态方法滥用是一个更大的错误。这是严密耦合和意大利面代码的根本原因之一 - 静态方法不强制通过合同进行设计,它们使得单元测试变得更加困难,它们不灵活且难以维护。 OP似乎是一个初学者,对于所有初学者的OO程序员,我必须这样说:**首先**学习如何编程类,然后**考虑静态方法。 – rsenna 2011-04-23 04:30:06
我不认为静态方法完全一样的优势 - 我猜必要之恶得多拨付。
当你设计一个类时,有时他/她会得到一个没有其他自然选项但声明一个静态方法的点。典型的例子是编写一个实例计数器,当你需要跟踪一个类的所有实例时:明确的做法是声明一个静态私有计数器和一个公共静态getter方法。
静态方法在处理本质上不是“面向对象”的功能时也很方便:辅助方法和多用途库通常被声明为静态方法。尽管如此,很多时候这是设计不良的一个症状 - 这些所谓的“通用”方法可能会被封装在真实对象中,并带有更多的想法,所以在做出这样的决定时应该小心。
所以请记住,静态只是变相全球,而且伤害了面向对象编程的根基。实际上,一些OO语言完全缺乏静态声明(例如Scala为了静态方法的相同目的而使用companion singletons)。
- 1. 使用方法调用静态方法?
- 2. 检查调用静态方法时是否调用了特定方法
- 3. 静态方法是否可以调用Java中的实例方法
- 4. 从Python中的静态方法调用非静态方法
- 5. 在java中调用非静态方法
- 6. 设计模式,以便在调用静态方法之前始终调用静态init方法
- 7. 用Java调用非静态方法Toasts
- 8. 从另一个静态方法中调用静态方法
- 9. Java错误:静态方法无法引用非静态方法
- 10. 本地Java方法是否等同于静态Java方法?
- 11. 是否有可能在一个静态方法使用Java
- 12. 了解Java中的静态方法
- 13. 是否有一种解决方法:“除了KeyboardInterrupt之外的”try:input():“
- 14. 如何使用静态方法调用非静态方法(使用WebControl)?
- 15. 静态方法调用
- 16. 静态方法调用单
- 17. 调用静态方法
- 18. 以静态方法调用?
- 19. 调用静态类方法
- 20. 什么是从Java中的静态方法调用非静态方法的最佳方式?
- 21. Powermock验证非静态方法中的私有静态方法调用
- 22. (Java)静态通用方法与泛型类静态方法
- 23. 如何从静态方法调用非静态方法?
- 24. 从静态基类方法调用静态派生类方法
- 25. 在Dao类中使用静态方法或非静态方法?
- 26. Java中的静态方法
- 27. java中的静态方法
- 28. Java中的静态方法
- 29. 调用静态类中的非静态方法 - java
- 30. Java静态方法
共同主题覆盖其他地方1. http://stackoverflow.com/questions/538870/java-static-methods-best-practices 2. http:// stackoverflow。com/questions/658407/static-methods 3. http://stackoverflow.com/questions/2671496/java-when-to-use-static-methods 4. http://stackoverflow.com/questions/752758/is-使用一个静态方法一个坏事 – 2011-04-23 03:51:20