是的,枚举是静态常量,但不是编译时常量.就像任何其他类一样,在第一次需要时加载枚举.如果稍微改变它的构造函数,你可以很容易地观察它
FontStyle(String description) {
System.out.println("creating instace of "+this);// add this
this.description = description;
}
并使用简单的测试代码
class Main {
public static void main(String[] Args) throws Exception {
System.out.println("before enum");
FontStyle style1 = FontStyle.BOLD;
FontStyle style2 = FontStyle.ITALIC;
}
}
如果您将运行main方法,您将看到输出
before enum
creating instace of NORMAL
creating instace of BOLD
creating instace of ITALIC
creating instace of UNDERLINE
这表明当我们想第一次使用枚举时,enum类已被加载(并且其静态字段已被初始化).
你也可以使用
Class.forName("full.packag.name.of.FontStyle");
如果尚未加载则导致其加载.