【问题标题】:Best of static method and non static method [closed]最好的静态方法和非静态方法[关闭]
【发布时间】:2018-04-26 01:44:19
【问题描述】:

我有 Util 类,我有很多方法可以在整个项目中使用。 我的问题是 - 考虑到内存堆,性能最好使用类引用的静态方法或该类的对象调用的非静态方法。例如:

public class Utilities {

    private static Utilities utils;

    public static Utilities getInstance() {
        if (utils == null)
            utils = new Utilities();
        return utils;
    }

    public static void someMethod() {

    }

    public void someMethod2() {

    }

}

public static void main(String[] args) {
    Utilities.someMethod();
    Utilities.getInstance().someMethod2();
}

哪种方法适合我的要求?

【问题讨论】:

  • 没有与合同相关的重大差异。您只需要考虑对调用者类进行单元测试(使用静态方法更难)。否则,归结为偏好(静态导入等)
  • 您在此处显示的内容看起来像“单例与静态上下文”。在这种情况下,这应该是相关的:stackoverflow.com/a/12367609, When is Singleton appropriate?
  • @Ernest 抱歉,我没听清楚,是一样的吗?

标签: java static


【解决方案1】:

除非您心中有一个非常具体的目标,否则这无关紧要。可以调整类或方法声明格式,例如:

确保应用程序最关键部分中的方法被内联是有意义的,但只有当您的应用程序受 CPU 限制时才有意义。对外部资源的一次调用,例如数据库查询将比本地代码贵几个数量级。

在开始优化之前,代码应该是可修改的。 static 方法更难进行单元测试,因此如果它们包含需要单元测试的重要逻辑,则可能应该避免使用它们。

【讨论】:

  • 所以单例模式更可取?
  • 或者像Spring这样的依赖注入框架。有些人认为单例是一种反模式,但在一个简单的应用程序中推出 DI 框架可能有点过头了。
猜你喜欢
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 2016-08-07
相关资源
最近更新 更多