下面就是一个典型枚举类型的定义:
Java代码
Java代码
public enum Color{
RED,BLUE,BLACK,YELLOW,GREEN
}
显然,enum很像特殊的class,实际上enum声明定义的类型就是一个类。
而这些类都是类库中Enum类的子类(java。lang。Enum)。它们继承了这个Enum中的许多有用的方法。我们对代码编译之后发现,编译器将enum类型单独编译成了一个字节码文件:Color。class。
Color字节码代码
final enum hr。
test。Color {
// 所有的枚举值都是类静态常量
public static final enum hr。test。Color RED;
public static final enum hr。test。Color BLUE;
public static final enum hr。
test。Color BLACK;
public static final enum hr。test。Color YELLOW;
public static final enum hr。test。Color GREEN;
private static final synthetic hr。
test。Color[] ENUM$VALUES;
// 初始化过程,对枚举类的所有枚举值对象进行第一次初始化
static {
0
new hr。test。Color [1]
3
dup
4
ldc [16] //把枚举值字符串"RED"压入操作数栈
6
iconst_0
// 把整型值0压入操作数栈
7
invokespecial hr。
test。Color(java。lang。String, int) [17] //调用Color类的私有构造器创建Color对象RED
10
putstatic hr。test。Color。RED : hr。test。Color [21]
//将枚举对象赋给Color的静态常量RED。
。。。。。。。。。
枚举对象BLUE等与上同
102
return
};
// 私有构造器,外部不可能动态创建一个枚举类对象(也就是不可能动态创建一个枚举值)。
private Color(java。lang。String arg0, int arg1){
// 调用父类Enum的受保护构造器创建一个枚举对象
3
invokespecial java。
lang。Enum(java。lang。String, int) [38]
};
public static hr。test。Color[] values();
// 实现Enum类的抽象方法
public static hr。test。
Color valueOf(java。lang。String arg0);
}
下面我们就详细介绍enum定义的枚举类的特征及其用法。(后面均用Color举例)
1、Color枚举类就是class,而且是一个不可以被继承的final类。
其枚举值(RED,BLUE。。。)都是Color类型的类静态常量, 我们可以通过下面的方式来得到Color枚举类的一个实例:
Color c=Color。RED;
注意:这些枚举值都是public static final的,也就是我们经常所定义的常量方式,因此枚举类中的枚举值最好全部大写。
全部