jdk5加入了枚举类型以解决定义常量的问题
//final static int i=5;就是一个常量,定义大量的常量很麻烦
一个基本的枚举类型:
enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY}
- 枚举是一种类,事例中就是“Day”类型,但是不能用new关键字实例化
- 枚举中的每一个元素都是“Day”类型
- 枚举建议使用大写字母(常量也是)
枚举类型的本质
enum关键字是一个语法糖,它在编译时将枚举类型转化为一个继承于ENUM的类
- ENUM类的构造方法被指定为protected,只能由编译器调用
- 枚举和普通的类没有区别,可以实现接口,但是不能继承(已经继承了Enum类)
- 自定义时需要指定构造方法为private
基本方法
int compareTo(E)//比较与指定枚举对象的顺序差,Day.Monday.compareTo(Day.Friday)将返回-4String name()//返回此枚举常量的名称,Day.Monday就是Monday//该方法和toString方法差不多int original()//返回此枚举常量的位置(从0开始)static E[] values()//将枚举中的所有值返回一个枚举类型数组static E valueOf(String name)//通过名称获取枚举类型中同名的枚举类型
枚举和RTTI(运行时类信息)-枚举的class对象有特别的方法
bool isEnum()//判断是否为枚举类型E[] getEnumConstants()//返回枚举中所有值
定制枚举类型
- 定制Enum可以为域定义描述字符
- 定制拥有固定写法:
enum Week{ Monday("星期一"), Tuesday("星期二"), Wenesday("星期三"), Thursday("星期四"), Friday("星期五"), Saturday("星期六"), Sunday("星期日"); private String desc; private Week(String desc){ this.desc=desc; } public String getDesc() { return desc; }}