enum全称enumeration,是JDK5中引入的特性。

枚举简介

  1. 定义:被enum关键字修饰的类型就是枚举类型。
  2. 优点:可以将常量组织起来,统一进行管理。
  3. 场景:错误码、状态机等。
  4. 枚举的本质:是java.lang.Enum的子类。尽管enum看起来像是一种新的数据类型,事实上,enum是一种受限制的类,并且具有自己的方法。枚举这种特殊的类因为被修饰为final,所以不能继承其他类。定义的枚举类,会被默认修饰为 public static final,从修饰的关键字,即可以看出枚举值本质上是静态常量。

枚举的方法:

  • values():返回enum实例的数组,而且该数组中的元素严格保持在enum中声明时的顺序。
  • name():返回实例名。
  • ordinal():返回实例声明时的索引值。
  • getDeclaringClass():返回实例所属的enum类型。
  • equals():判断是否为同一个对象。

枚举的特征:

  1. 除了不能继承,基本上可以将enum看做一个常规的类。
  2. 如果枚举中没有定义方法,也可以在最后一个实例后面加逗号、分好或者什么都不加。
  3. 如果要为enum定义方法,那么必须在enum的最后一个实例尾部添加一个分号。此外,在enum中必须先定义实例,不能将字段或方法定义在实例前面,否则,编译器会报错。
  4. java不允许使用=为枚举常量赋值。
  5. enum可以通过方法来显示的赋值。
  6. 枚举可以添加普通方法、静态方法、抽象方法、构造方法。
  7. 枚举可以实现接口。
  8. 枚举不可以继承。因为enum实际上都继承自java.lang.Enum类,而java不支持多重继承,所以enum不能再继承其他类,当然也不能继承另一个enum。

枚举的应用:

  • 组织常量
  • switch状态机
  • 错误码
  • 组织枚举
  • 策略枚举
  • 枚举实现单例模式

枚举工具类:

java中提供了两个方便操作enum的工具类----EnumSet和EnumMap

1、EnumSet是枚举类型的高性能Set实现。它要求放入它的枚举常量必须属于同一枚举类型。

2、EnumMap是专门为枚举类型量身定做的Map实现。虽然使用其他的Map实现(如HashMap)也能完成枚举类型实例到值的映射,但是使用EnumMap会更加高效:它只能接收同一枚举类型的实例作为键值,并且由于枚举类型实例的数量相对固定并且有限,所以EnumMap使用数组来存放与枚举类型对应的值。这使得EnumMap的效率非常高。