枚举的实例默认情况下是静态的吗? [英] Are instances of enums static by default?

查看:83
本文介绍了枚举的实例默认情况下是静态的吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

动物{
DOG(woof),
CAT(喵),
FISH(Burble);

字符串声;

动物(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 为null并且枚举未声明为静态时,枚举的实例(即as.DOG.sound)
默认情况下枚举实例是否静态?

解决方案

枚举是隐式的 public static final



您可以参考 a.DOG ,因为您可以通过实例引用访问静态成员,即使是null:静态分辨率使用引用类型,而不是实例。



我不会;这是误导的:惯例喜欢类型(不是实例)静态引用。



请参阅 JLS 6.5.6.2 。请参阅 JLS 15.11 ,为什么它仍然适用一个 null 。 Nutshell:它是参考类型,而不是通过这些静态解析的实例。






更新的链接:/



JSE 6





JSE 7



查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆