静态初始化程序对于cletus很有用,我以相同的方式使用它们。如果你有一个静态变量要在加载类时进行初始化,则可以使用静态初始值设定项,尤其是因为它允许你执行复杂的初始化并且仍然具有静态变量be
final。这是一个巨大的胜利。
我发现“
if(someStaticVar == null)//做东西”是混乱且容易出错的。如果它是静态初始化并声明的
final,则避免了被初始化的可能性null。
但是,当你说:
静态/实例初始值设定项可用于设置“最终”静态/实例变量的值,而构造函数不能
我假设你同时在说:
- 静态初始值设定项可用于设置“最终”静态变量的值,而构造函数不能
- 实例初始化器可用于设置“最终”实例变量的值,而构造函数不能
而你在第一点上是正确的,在第二点上是错误的。例如,你可以执行以下操作:
class MyClass { private final int counter; public MyClass(final int counter) { this.counter = counter; }}同样,当构造函数之间共享大量代码时,处理此问题的最佳方法之一是链接构造函数,并提供默认值。这很清楚地表明正在做什么:
class MyClass { private final int counter; public MyClass() { this(0); } public MyClass(final int counter) { this.counter = counter; }}


