除了调用之外,java中是否有任何静态方法/函数的使用?

时间:2011-04-23 03:44:41

标签: java oop

将方法声明为static是否有任何优势,除非可以在不实例化类的情况下调用它?

3 个答案:

答案 0 :(得分:4)

不需要实例化类来调用方法本身就是一个优点。考虑方法库,例如java.lang.Math。

静态方法也用作工厂方法 - 您调用静态方法来获取对象 - 通常是某个接口的实现。我们的想法是,根据您传递的参数,该方法可以确定为您构建的具体实现。如果你必须有一个对象实例,你可以调用这样一个方法,你要么有一个鸡蛋和鸡蛋,要么创建第二个类的实例只是为了调用工厂方法给你第一个实例。 / p>

您可能还会发现感兴趣的this StackOverflow question on whether or not methods should be static by default,尤其是已接受的答案。

答案 1 :(得分:2)

使用static方法的原因有很多。以下是一些例子:

  1. 设置与每个班级实例相关的参数,例如当您有许多时钟时的时间格式(24小时与上午/下午)。
  2. 提供与更大/其他数据无关的单一操作(例如Math类,如提到的QuantumMechanic)。
  3. 限制使用一个实例(singleton),并从不同的地方对其进行操作。
  4. 最重要的是,即使你编写OO,也不意味着每个东西都是一个对象,并且每个方法都需要在一个对象上调用,一些方法是独立的,并且强制它们上面的OO模式似乎 me 就像一个不好的做法。我甚至不记得我编写的一个没有使用静态方法的应用程序。

答案 2 :(得分:1)

我不认为静态方法完全是优势 - 我猜必要的邪恶更加适用。

当一个人设计一个班级时,有时候他/她会达到一个没有其他自然选择但是宣布一个静态方法的点。规范示例是编写实例计数器,当您需要跟踪类的所有实例时:显而易见的方法是声明静态私有计数器和公共静态getter方法。

静态方法在处理非“面向对象”的功能时也很方便:辅助方法和多用途库通常被声明为静态。尽管如此,很多时候这是设计糟糕的症状 - 这些所谓的“通用”方法可能会被更多地考虑在真实对象中,所以在做出这样的决定时你应该小心。

所以请记住, static 只是伪装成全局,这会损害面向对象编程的基础。事实上,由于这个原因,一些OO语言完全没有静态声明(例如,Scala使用companion singletons用于静态方法的相同目的)。