public class EnumTest {
/**
* 枚举:
* 相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法
* 枚举元素必须位于枚举体中的最开始部分,枚举元素列表后要有分号与其他成员分开。
* 枚举只有一个成员的时候,就可以作为一种单例的实现方式
* @param args
*/
public static void main(String[] args) {
WeekDay weekDay1 = WeekDay.SUN;
System.out.println(weekDay1);//SUN
System.out.println(weekDay1.name());//SUN
System.out.println(weekDay1.ordinal());//得到顺序
System.out.println(WeekDay.valueOf("SAT"));//SAT
System.out.println(WeekDay.values().length);//长度 7
}
/**
* 带构造方法的枚举:
* 构造方法必须定义成私有的
* 如果有多个构造方法该调用那个?
* 枚举元素MON和MON()的效果都一样,都是调用默认的构造方法
*
*
*/
public enum WeekDay{
SUN(1),MON,TUE,WED,THI,FIR,SAT;
private WeekDay(){};
private WeekDay(int i){};
}
/**
* 带方法的枚举:
* 每个元素分别是由枚举类的子类来生成的实例对象,
* 这些子类采用类似内部类的方式定义
* 以下 RED ,GREEN,YELLOW都是TrafficLamp 的子类,
*/
public enum TrafficLamp{
RED(30){
public TrafficLamp nextLamp() {
return GREEN;
}
},
GREEN(40){
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;}
}
}