为什么助手类的方法被声明为静态的呢?

5
为什么所有的辅助类或工具类都被声明为静态的?
这只是为了方便,不用每次创建类的实例吗?
静态会严重影响性能吗?
例如:
DateHelper.getCurrentDate();

13
一个原因是:因为它们是无状态的。 - Hovercraft Full Of Eels
而且静态变量不会对性能造成有害影响,相反地,由于不需要创建实例,因此更加高效。 - Kayaman
通常情况下,静态并不会对性能产生影响。但在特定情况下,它可能非常重要。 - dtech
1
这更多是一个“设计”问题。正如Hovercroft所指出的那样,在这里没有必要保留“状态”。 - TheLostMind
1
@Kayaman,你刚才说“静态变量不会对性能造成伤害,相反还有帮助”。实际上,有很多情况下static会影响性能(也有很多情况下它会提高性能)。 - dtech
显示剩余13条评论
2个回答

7
因为它们不受状态限制,所以它们具有单一的无状态功能。例如,Math.abs(double a),它接受一个double参数并返回绝对值。就这么简单。因此,您不必执行例如以下操作:

Math m=new Math();
m.abs(12.33);

每次进行一个简单的绝对值计算,只取决于其参数时,使用静态方法会使调用实用方法变得简单。
编辑:-要补充的是,在使用静态方法时没有性能损失。只有当该方法是 static synchronized 且多个线程同时想要访问它时,与不同实例中的线程访问相同方法(在非静态上下文中)相比,才会有延迟。但大多数实用方法都具有原子功能,因此使它们同步化没有意义。

-1

为了不创建它们的实例,您也可以让它们遵循单例模式


没有问题。这种情况不会再发生了。 - Meiblorn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接