public final class ControllerHolder extends Enum
{
public static ControllerHolder[] values()
{
return (ControllerHolder[])$VALUES.clone();
}
public static ControllerHolder valueOf(String s)
{
return (ControllerHolder)Enum.valueOf(com/zzk/singleton/ControllerHolder, s);
}
private ControllerHolder(String s, int i)
{
super(s, i);
controller = new Controller();
}
public static Controller getInstance()
{
return INSTANCE.controller;
}
public static final ControllerHolder INSTANCE;
//controller会随ControllerHolder的初始化而初始化
private Controller controller;
private static final ControllerHolder $VALUES[];
static
{
INSTANCE = new ControllerHolder("INSTANCE", 0);
$VALUES = (new ControllerHolder[] {
INSTANCE
});
}
}
public final class ControllerHolder extends Enum 这一行说明 枚举就是一个普通的类,只是继承了Enum类.
public static final ControllerHolder INSTANCE; 这一行, ControllerHolder是静态的,并且INSTANCE = new ControllerHolder("INSTANCE", 0);在静态代码块中执行, 这种方式 jvm会保证运行static代码块是线程安全并且只执行一次的,所以Controller作为ControllerHolder的一个属性,自然也只声明一次和线程安全的