枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常熟。当一个变量有几种固定可能的取值时,就可以将其定义为枚举类型。
Java中枚举是一个特殊的类,使用enum关键字来定义,常量之间使用逗号','来分割。
可定义枚举名称、可访问性基础类型和成员等,声明格式如下:
enum-modifiers enum enumname:enum-base { enum-body, }
注:任意两个枚举成员不能具有相同的名称,且它的常数值必须在该枚举的基础类型的范围之内,多个枚举成员之间使用逗号分隔。
如1.1所述,Java中的枚举为特殊的类,均继承自java.lang.Enum类。每个枚举类型成员可看作为一个Enum类的实例,默认被final,public,static修饰,使用枚举类型成员时直接使用枚举名称调用成员即可。
枚举实例常调用的Enum类方法如下:
一些具体用法:
public class EnumTest { public static void main(String[] args){ System.out.println(SexEnum.valueOf("male").ordinal()); System.out.println(SexEnum.values()[0].ordinal()); } } enum SexEnum{ male,female; }
枚举常量可以有自己的方法,此时需注意:
需在枚举实例的最后一个成员后添加分号,且必须先定义枚举实例。
eg.创建WeekDay枚举
enum WeekDay{ Mon("Monday"),Tue("Tuesday"),Wed("Wednesday"),Thu("Thusday"), Fri("Friday"),Sat("Saturday"),Sun("Sunday"); private String day; WeekDay(String day) { this.day = day; } public static String getDay(int i){ switch(i){ case 1: return WeekDay.Mon.day; case 2: return WeekDay.Tue.day; default: System.out.println("Wrong Number!"); return null; } } //重写了父类的方法 @Override public String toString() { return day; } }
注:若枚举类中含抽象方法,则需在枚举类中的每个对象都将其实现
enum SexEnum{ male{ public String getSex(){ return("Male"); } }, female{ public String getSex(){ return("Female"); } }; public abstract String getSex(); }
EnumMap 是专门为枚举类型量身定做的 Map 实现。虽然使用其他的 Map(如 HashMap)实现也能完成枚举类型实例到值的映射,但是使用 EnumMap 会更加高效。
定义方法:Map<SexEnum, Integer> map1 = new EnumMap<SexEnum, Integer>(SexEnum.class);
EnumSet 是枚举类型的高性能 Set 实现,它要求放入它的枚举常量必须属于同一枚举类型。
EnumSet 提供了许多工厂方法以便于初始化,如下所示
定义方法:
EnumSet\<SexEnum> set = EnumSet.of(SexEnum.female); Set\<SexEnum> set1 = EnumSet.complementOf(set);