在Java中使用静态变量和方法的好处

时间:2011-04-26 20:06:26

标签: java variables methods static

在Java中使用静态变量和方法有什么好处?

2 个答案:

答案 0 :(得分:14)

静态变量的好处:

  • 可以定义常量 占用额外的记忆(一个用于 每个班级)
  • 可以访问常量 没有类的实例化

静态方法的好处:

  • 与实例无关的行为可以 定义而不用担心意外 与一个实例的交互 类

答案 1 :(得分:7)

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

因此,方法和变量永远不应该是静态的,只是为了找到它们的位置。它们与OO原则(特别是继承)相冲突,往往缺乏灵活性,难以重构和测试。静态的使用对于真实的,不可变的常量(但通常是Enums是更好的选择),“服务对象”或完全与对象无关的方法是很好的。当需要工厂时,它们可能是一个解决方案(但是,请考虑依赖注入或服务提供者接口)。尽量避免其他用法。