jdk5加入了枚举类型以解决定义常量的问题

//final static int i=5;就是一个常量,定义大量的常量很麻烦

一个基本的枚举类型:

  1. enum Day {
  2. MONDAY, TUESDAY, WEDNESDAY,
  3. THURSDAY, FRIDAY, SATURDAY, SUNDAY
  4. }
  • 枚举是一种类,事例中就是“Day”类型,但是不能用new关键字实例化
  • 枚举中的每一个元素都是“Day”类型
  • 枚举建议使用大写字母(常量也是)


枚举类型的本质

enum关键字是一个语法糖,它在编译时将枚举类型转化为一个继承于ENUM的类
  • ENUM类的构造方法被指定为protected,只能由编译器调用
  • 枚举和普通的类没有区别,可以实现接口,但是不能继承(已经继承了Enum类)
  • 自定义时需要指定构造方法为private

基本方法

  1. int compareTo(E)
  2. //比较与指定枚举对象的顺序差,Day.Monday.compareTo(Day.Friday)将返回-4
  3. String name()
  4. //返回此枚举常量的名称,Day.Monday就是Monday
  5. //该方法和toString方法差不多
  6. int original()
  7. //返回此枚举常量的位置(从0开始)
  8. static E[] values()
  9. //将枚举中的所有值返回一个枚举类型数组
  10. static E valueOf(String name)
  11. //通过名称获取枚举类型中同名的枚举类型

枚举和RTTI(运行时类信息)-枚举的class对象有特别的方法

  1. bool isEnum()
  2. //判断是否为枚举类型
  3. E[] getEnumConstants()
  4. //返回枚举中所有值

定制枚举类型

  • 定制Enum可以为域定义描述字符
  • 定制拥有固定写法:
    1. enum Week{
    2. Monday("星期一"),
    3. Tuesday("星期二"),
    4. Wenesday("星期三"),
    5. Thursday("星期四"),
    6. Friday("星期五"),
    7. Saturday("星期六"),
    8. Sunday("星期日");
    9. private String desc;
    10. private Week(String desc){
    11. this.desc=desc;
    12. }
    13. public String getDesc() {
    14. return desc;
    15. }
    16. }