静态初始化器?

Chu*_*cky 5 java static

有什么区别:

private static Object myVar = new Object();
Run Code Online (Sandbox Code Playgroud)

和:

private static Object myVar2;

static{
    myVar2 = new Object();
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我最终得到一个启动的静态变量

rek*_*ire 8

如果静态和最终对象的初始化更复杂,则可以更好地使用第二个.

例如:

static final MyClass something;

static {
    Config conf=SettingsManager.getSettings();
    MyClass obj=MyClassFactory.getInstance(conf);
    obj.setVodoo(true);
    something=obj;
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*nik 6

在您的示例中没有区别,编译的字节码将完全或几乎相同.静态初始化器有时很有用,但更常被误用.如果目标是填充单个静态字段,请编写一个静态方法,该方法返回初始化对象并在静态字段声明中调用该方法.