在Java中使用静态变量和方法有什么好处?
答案 0 :(得分:14)
静态变量的好处:
静态方法的好处:
答案 1 :(得分:7)
关于静电的使用一直存在争议。当您将变量或方法设为静态时,它们不再是继承的主体,这使它们不那么灵活(例如,单元测试的问题)。如果静态方法不需要实例,那么它就很有用。一个典型的例子是java.lang.Math
的方法,大多数人都同意静态就好了。另一个用途是将工厂方法作为“起点”,以便与库或框架交互,例如获取初始JNDI上下文或JPA的EntityManager。但是,工厂不应该被滥用,一旦掌握了一些东西,就不需要再次打电话给工厂了。工厂方法的现代替代是依赖注入(例如,在Spring,Guice或EJB 3.x中)。静态变量通常用于“常量”(如Math.PI
)。枚举在内部使用此技术实现。请注意,旧的Singleton模式现在被认为是有潜在危险的(例如,假设你需要引入池来提高性能),如果你真的想要实现Singleton,最好的方法似乎是Enum只有一个元素的类。静态变量的其他用途包括注册表或全局属性之类的东西,但是你可以猜测,这也不是很灵活,应该避免。出于性能原因,可能可以重用“服务对象”(我不知道这些对象有一个明确定义的名称),通过使它们静态创建是很昂贵的(日历,随机,格式化程序,如DateFormat,Logger),但要小心避免线程问题。
因此,方法和变量永远不应该是静态的,只是为了找到它们的位置。它们与OO原则(特别是继承)相冲突,往往缺乏灵活性,难以重构和测试。静态的使用对于真实的,不可变的常量(但通常是Enums是更好的选择),“服务对象”或完全与对象无关的方法是很好的。当需要工厂时,它们可能是一个解决方案(但是,请考虑依赖注入或服务提供者接口)。尽量避免其他用法。