【发布时间】:2019-06-25 16:54:39
【问题描述】:
我想知道为类初始化复杂对象类型的常量字段的最佳方法是什么,哪个性能最高?
1) 内联初始化
public class TopClass {
private static final ComplexObject sdf = new ComplexObject();
public TopClass (
}
}
2) 初始化方法
public class TopClass {
private static final ComplexObject sdf = initializeComplexObject();
private static ComplexObject initializeComplexObject(){
return sdf == null ? new ComplexObject() : sdf;
}
public TopClass (
}
}
3) 在构造函数中初始化, 4) 静态初始化块 或您建议的其他方法...
每次创建新的 TopClass 类时,sdf 是否都会初始化? 我希望 sdf 字段在应用程序生命周期内只初始化一次。
【问题讨论】:
-
静态初始化器的性能几乎无关紧要(尤其是对于这种微不足道的初始化),因为它只为一个类完成一次。这里更大的问题是确保
sdf永远不会在线程之间共享。 -
我同意@AndyTurner,在这种情况下,目标是可读性,而不是性能。第一个好,一行行就不要加没用的静态方法。
-
另外,如果这是用于日志记录,大多数日志记录框架可能已经可以格式化您给它们的日期(以可配置的方式)
标签: java