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)将返回-4
String 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;
}
}