【黑马程序员】jdk`.5-------枚举类

来源:互联网 发布:淘宝买东西用什么支付 编辑:程序博客网 时间:2024/05/02 07:35

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------




一、枚举类的定义:

查阅:API中Enum类是一个抽象类,实现了Serizlizable和Comparable接口,继承Object类。枚举是使用enum关键字来修饰类名来创建枚举类,相当于它继承了Enum这个抽象类,可以使用其中的方法

二、枚举的特点:

1、枚举是一个特殊的类,其中可以定义构造方法,成员变量,普通方法,和抽象方法。


2,、枚举类中的构造方法必须是private私有的,因为枚举中的成员变量是固定不变,所以用静态常量来表示,用大写字母表示。外面对其访问可以通过(类名、常量)来调用。


3、枚举类是一个fian类,他的抽象方法必须在它的内部实现


4、枚举是一个特殊的类,他的每个元素就是他的一个实例对象,因此他不可以有子类



5、枚举元素必须位于枚举类中的第一行,用逗号分开,结尾用分号结束。否则会编译不通过


6、枚举元素可以使用switch选择语句


三、枚举的应用:

枚举就让某个类型的变量的取值只能为若干个固定值中的一个,否则编译器就报错,枚举可以让编译器在编译时期就可控制程序中填写的非法值,普通变量的发送在开发阶段无法实现这一目标。这时就要用的枚举类


练习:

/*  * 用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能。      1、私有的构造方法     2、每个元素分别用一个公有的静态成员变量表示     3、可以有若干公有方法或抽象方法。采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。  */      public abstract class WeekDay {      private WeekDay(){}        public final static WeekDay SUN=new WeekDay(){          public WeekDay nextDay(){              return MON;          }      };            public final static WeekDay MON=new WeekDay(){          public WeekDay nextDay(){              return SUN;          }      };            public abstract WeekDay nextDay();        public String toString(){          return this==SUN?"SUM":"MON";      }  } 


练习:一周7天的例子。

 public class WeekdayTest{public static void main(String[] args){Weekday[] days = Weekday.values();         for(Weekday day : days)         {               System.out.println("今天是: "+day);               System.out.println("明天是:"+day.nextDay());         }}//定义一个内部枚举类enum Weekday{//每个元素使用匿名内部类的方法来实现抽象方法,返回当天的下一天是星期几       MON       {        @Override     public Weekday nextDay()    {      return TUE;    }       } ,       TUE       {       @Override    public Weekday nextDay()    {    return WED;    }       },        WED       {       @Override    public Weekday nextDay()    {    return THU;    }       },    THU       {      @Override    public Weekday nextDay()    {    return FRI;    }       },       FRI       {     @Override    public Weekday nextDay()    {    return SAT;    }          },       SAT       {        @Override        public Weekday nextDay()        {        return SUN;        }       },       SUN       {        @Override        public Weekday nextDay()        {        return MON;        }       };       //定义一个抽象方法来表示下一天是星期几       public abstract Weekday nextDay();}}

练习:带参数的私有的构造方法。
public class EnumTest {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubWeekDay1 weekDay=WeekDay1.SUN;System.out.println(weekDay);WeekDay weekDay2=WeekDay.SAT;System.out.println(weekDay2);System.out.println("对象名字:"+weekDay2.name());System.out.println("返回对象的天数:"+weekDay2.ordinal());System.out.println("返回数组:"+weekDay2.values());System.out.println("返回枚举类元素个数:"+weekDay2.values().length);System.out.println("求字符串对应的WeekDay2的值:"+weekDay2.valueOf("FRI"));}//enum关键字,枚举,内部类public enum WeekDay{//带参数的构造方法SUN,MON,TUE,WED,THI,FRI(1),SAT;WeekDay(){System.out.println("空参数");}WeekDay(int i){System.out.println("int参数:");}}
练习:交通灯例子。
//enum关键字,枚举,内部类public enum WeekDay{//带参数的构造方法SUN,MON,TUE,WED,THI,FRI(1),SAT;WeekDay(){System.out.println("空参数");}WeekDay(int i){System.out.println("int参数:");}}//交通灯,的枚举类public enum TrafficLamp{RED(10){@Overridepublic TrafficLamp nextLamp() {// TODO Auto-generated method stubreturn GREEN;}},GREEN(8){@Overridepublic TrafficLamp nextLamp() {// TODO Auto-generated method stubreturn YELLOW;}},YELLOW(3){@Overridepublic TrafficLamp nextLamp() {// TODO Auto-generated method stubreturn RED;}};//无参构造方法public abstract TrafficLamp nextLamp();int  time;//有参构造方法private TrafficLamp(int time){this.time=time;}} }


原创粉丝点击