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