黑马程序员_java之枚举

枚举

枚举:让某个类型的变量的取值只能为若干个固定的值中的一个

普通类实现枚举:私有改造函数、每个元素用共有的静态成员变量表示

可以有若干个共有或抽象方法(将大量的if else语句转成一个个独立的类)

public abstract class WeekDay1 {   

    private WeekDay1(){}

    public final static WeekDay1 SUN=new WeekDay1(){

       public  WeekDay1 nextDay(){

           return MON;

       }

    };

    public final static WeekDay1 MON=new WeekDay1(){

       public  WeekDay1 nextDay(){

           return SUN;

       }

    };

    /*public WeekDay nextDay(){

       if(this ==SUN){

           return MON;

       }

       else{

           return SUN;

       }

    }*/

    //将大象的if else语句转成一个个独立的类

    public abstract WeekDay1 nextDay();

    public String toString(){

       return this==SUN?"SUN":"MON";

    }

}

带构造方法的枚举

public enum WeekDay{

     //元素列表定义在其他成分前面,用分号和其他成分分离,构造方法私有

       SUN(1),MON(),TUE,WED,THI,FRI,SAT;

       private WeekDay(){System.out.println("first");};

       private WeekDay(int Day){System.out.println("second");};

}

  System.out.println(weekday2.name());

     System.out.println(weekday2.ordinal());

       System.out.println(WeekDay.values().length);

       System.out.println(WeekDay.valueOf("SUN"));

       System.out.println(WeekDay.values().length);

带方法的枚举

例:实现带有抽象方法的枚举,模拟交通灯

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;}

    }

总结: 枚举是一个特殊的类,其中可定义构造方法、成员变量、普通方法和抽象方法,每个元素都是该类的一个实例对象 ;

枚举只有一个成员时,也可以作为一种单例的实现方式。

posted on 2013-01-28 15:26  念满  阅读(147)  评论(0编辑  收藏  举报