【问题标题】:Java - Performance difference between static and non staticJava - 静态和非静态之间的性能差异
【发布时间】:2017-11-16 08:36:32
【问题描述】:

当每次初始化类并且方法不是静态的(new Class())或者这个类中的方法是静态的并且它们的用法类似于Class.method()时,性能差异有多大?

示例代码:

//File Class1
public class Class1{
    public static void myMethod(){
        System.out.println("Static method, usage: Class1.myMethod();")
    }
}

//File Class2
public class Class2{
    public void myNonStaticMethod(){
        System.out.println("Non static method, usage: Class2 class2 = new Class2(); class2.myNonStaticMethod();")
    }
}

哪个会更快?静态还是带类初始化的方法?

PS。对不起,如果我做错了什么。英语不是我的主要语言。 :P

【问题讨论】:

  • 那里没有真正的问题。选择一个而不是另一个的重点不是效率,而是目的和要求。
  • 那么当我携带性能时,哪个更好用?在某些情况下我不需要“超级”,所以如果静态更快,我可以在那里使用它,但它好吗?
  • 为什么要为每个调用创建一个Class2 的新实例?该方法与该类的实例有什么关系?您希望该方法可被覆盖吗?
  • 出于同样的原因,每次创建新文本块时都初始化字符串。请注意,这只是一个示例代码,我只是询问性能差异:P
  • 正如其他人已经说过的那样,静态与否不是您应该决定性能标准的事情,但该方法是否需要对象实例才能正常工作。如果方法不需要对象并且其内部状态使其成为静态。

标签: java class static initialization


【解决方案1】:

这取决于您要达到的目标。将方法或变量设为静态的目的是当您希望能够访问它们而不必创建其父类的实例时。例如:

你可以有一个类来计算身体质量指数。在该类中,您可以使用 x 方法将千克转换为磅。现在可以将公斤转换为磅,但不想计算他们的体重指数。在这种情况下,将 x 方法设为静态是有意义的,因此可以在不创建 x 的新实例的情况下将千克转换为磅。

因此,这实际上与性能无关,而与使用有关。

【讨论】:

  • 感谢您的回答!所以,如果我正在创建类似 API 的东西,最好的选择是让方法成为静态的。但是,例如,当我创建 PlayerData(它将保存所有玩家数据,如位置、名称)时,最好将它们设为公开并使用类构造函数将初始化的类导出到其他类,而不是使用静态哈希图单独收集所有数据?
  • 对于像PlayerData 这样的东西,它将保存所有玩家数据,如位置、名称。是的,您应该创建一个新实例。但基本上静态方法/变量在它们所做的事情不依赖于实例变量之类的东西时使用
猜你喜欢
  • 2011-04-19
  • 1970-01-01
  • 2018-04-02
  • 2015-10-09
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
相关资源
最近更新 更多