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

Mat*_* B. 11 java variables methods static

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

cor*_*iKa 14

静态变量的好处:

  • 可以定义常量而无需占用额外的内存(每个类一个)
  • 可以在没有类的实例化的情况下访问常量

静态方法的好处:

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


Lan*_*dei 7

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

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