enum Animals{
DOG("woof"),
CAT("Meow"),
FISH("Burble");
String sound;
Animals(String s) {
sound = s;
}
}
public class TestEnum{
static Animals a;
public static void main(String ab[]){
System.out.println( a );
System.out.println( a.DOG.sound + " " + a.FISH.sound);
}
}
在上面的例子中,为什么当a
为空且枚举未声明为静态时,我们能够访问枚举的实例(即作为a.DOG.sound)?
枚举实例默认是静态的吗?
答案 0 :(得分:22)
枚举隐含public static final
。
您可以参考a.DOG
因为可能通过实例引用访问静态成员,即使是null:静态解析使用引用类型,而不是实例。
我不会;它具有误导性:约定支持类型(非实例)静态引用。
通过实例查看关于类变量的JLS 6.5.6.2。有关null
的原因,请参阅JLS 15.11。 Nutshell:它是引用类型,而不是实例,通过它可以解析静态。
JSE 6
JSE 7
JSE 8
答案 1 :(得分:6)
是的,枚举实际上是静态的。