枚举enum

枚举enum

起男 1,171 2020-07-07

枚举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异常,防止被反序列化