枚举enum
- 枚举是java1.5的特性,通过关键字enum类定义
- 枚举是一种特殊的类,可以有构造方法,定义成员变量和方法,也能实现接口
- 但不能继承其他类
原理
- 枚举在编译阶段会变成一个由final修饰的类,该类继承于抽象类Enum
- 抽象类Enum接收一个继承于Enum的泛型
- 构造器必须私有,额外有两个参数name(变量名)和ordinal(下标)
- 在静态代码块中进行实例初始化
- 枚举的每个实例都是一个静态常量,类型是本身
- 还有一个保存实例数组的静态常量
抽象类Enum
-
Enum(): 构造方法有两个参数name和ordinal,protected修饰,故程序员不可调用
-
compareTo():实现了Comparable接口,表明它是支持排序的(依赖于ordinal字段),并且compareTo方法是final的,所以排序规则不能改变
-
ordinal:表示枚举的顺序,从0开始按自然顺序增加,值是final的无法改变
-
ordinal():返回ordinal字段
-
name:表示枚举类的名字,其值就是定义实例的名字
-
name():返回name字段
-
toString():直接返回name
-
equals():使用==判断两个枚举是否相等
-
hashCode():调用Object的hashCode方法
-
getDeclaringClass():返回枚举声明的Class对象,用来判断两个枚举常量是否是同一个枚举类
-
clone():抛出了一个CloneNotSupportedException异常,主要是防止枚举被clone,保证枚举是单例的
-
valueOf():将指定名称的枚举常量返回
-
finalize():空方法,由protected修饰。作用是保证枚举不拥有finalize方法
-
readObject():抛出一个InvalidObjectException异常,防止被反序列化
-
readObjectNoData():抛出一个InvalidObjectException异常,防止被反序列化