枚举实例默认是静态的吗?

时间:2011-11-25 18:22:37

标签: java enums

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)? 枚举实例默认是静态的吗?

2 个答案:

答案 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)

是的,枚举实际上是静态的。