Java 默认情况下枚举实例是静态的吗?

Java 默认情况下枚举实例是静态的吗?,java,enums,Java,Enums,在上面的示例中,当a为空且enum未声明为静态时,为什么我们能够访问enum的实例(即作为.DOG.sound)? 默认情况下,枚举实例是静态的吗?是的,枚举实际上是静态的。枚举是隐式的公共静态final 您可以引用a.DOG,因为您可以通过实例引用访问静态成员,即使null:static resolution使用引用类型,而不是实例 我不会的;这是误导性的:约定偏爱类型(而不是实例)静态引用 请参阅关于通过实例的类变量。请参阅,了解为什么它仍然与null一起工作。简而言之:解决静态问题的是引用

在上面的示例中,当
a
为空且enum未声明为静态时,为什么我们能够访问enum的实例(即作为.DOG.sound)?
默认情况下,枚举实例是静态的吗?

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

枚举是隐式的
公共静态final

您可以引用
a.DOG
,因为您可以通过实例引用访问静态成员,即使null:static resolution使用引用类型,而不是实例

我不会的;这是误导性的:约定偏爱类型(而不是实例)静态引用

请参阅关于通过实例的类变量。请参阅,了解为什么它仍然与
null
一起工作。简而言之:解决静态问题的是引用类型,而不是实例


更新链接:/ JSE 6

JSE 7

JSE 8


枚举值和
静态
之间的唯一区别是不能在枚举值之前放置
静态{}
块。为什么这个问题被标记为scjp?
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);
    }
}