通过下面的一个实例,可以了解枚举类的一些用法:
public enum WeekDay  {
SUN,MON,TUE,WED,THU,FRI,SAT;     //创建一个枚举类(最后的分号可以不要)
}
1.   WeekDay  weekDay = WeekDay.FRI;
      System.out.println(weekDay);
      System.out.println(weekDay.name());     //效果和上面的一样获取的是一个对象,但是在打印的时候,自动实现了toString()方法,因此结果就是FRI。
2. System.out.println(weekDay.ordinal());
返回的是该对象在枚举类中的序列号(从0开始),结果为5。
3. weekDay.compareTo(o);
weekDay.equals(other);
这两个是用来比较两个对象时否相等。
4. System.out.println(weekDay.getClass());
获取定义自己的类(WeekDay)。
枚举类中的静态方法:
System.out.println(WeekDay.valueOf("SUN"));
System.out.println(WeekDay.valueOf("SU"));    //编译出错将字符串 SUN 转化成枚举对象中的元素(值得注意的是,如果传入的字符串不是枚举类中的元素,编译就出错)。
System.out.println(WeekDay.values()); //将枚举类中的元素放在一个数组中
for(WeekDay weekDay : WeekDay.values()) { //增强for循环遍历数组的元素
System.out.println(weekDay);
}
该静态方法可以用来遍历枚举类中的元素……
枚举类的构造函数
public enum WeekDay  {
SUN,MON,TUE,WED,THU,FRI,SAT;  
private WeekDay() {System.out.println("First");}
private WeekDay(int day){System.out.println("Second");}
}创建构造函数时注意:
①创建的构造函数必须位于元素列表之后
②创建的构造函数的类型必须为private
在枚举类的对象被创建时,默认调用的是无参的构造函数(上面调用的都是调用WeekDay()这个无参的构造函数),所以打印的结果为:
 First
 First
 First
 First
 First
 First
如果在调用有参的构造函数,要在枚举元素的后面加一个括号,里面传一个参数,如下:
public enum WeekDay  {
SUN(1),MON,TUE,WED(4),THU,FRI,SAT;  
private WeekDay() {System.out.println("First");}
private WeekDay(int day){System.out.println("Second");}
}
打印的结果为:
Second
 First
 First
 Second
 First
 First
 First因此括号里面不传参数,也是调用无参的构造函数(和不加括号的效果一样)。
枚举类中的抽象方法(交通灯的实例)
在枚举类中可以定义抽象方法时,但是在定义枚举元素的时候,就必须实现这个抽象方法。
public enum TrafficLamp {
   RED(30){
    public  TrafficLamp  nextLamp() {
     return GREEN;
    }
   },
   GREEN(45){
    public  TrafficLamp  nextLamp() {
     return YELLOW;
    }
   },
   YELLOW(5) {
    public TrafficLamp  nextLamp() {
    return RED;
    }
   };
   public abstract TrafficLamp  nextLamp();
   private int time;
   private TrafficLamp(int time) {     //构造函数
    this.time = time;
   }
  }这个实例综合了上面所学到的枚举类中的所有知识点,也是枚举类中最复杂的。
值得注意的是:当枚举只有一个成员时,就可以作为一种单例的实现方式……










