黑马程序员—Java基础加强—(枚举)

来源:互联网 发布:linux中curl -L 编辑:程序博客网 时间:2024/05/21 03:54

----------android培训、java培训、期待与您交流!----------

1.枚举

枚举(Enum)是Java1.5新加入的一个数据类型,枚举就相当于一个类,与其他数据类型不同的是枚举可以自己定义常量.提高了安全性

jdk1.6 switch语句也支持枚举类型了

2.枚举的常用方法:

static <T extends Enum<T>>
T
valueOf(Class<T> enumType,String name)
          返回带指定名称的指定枚举类型的枚举常量。 Stringname()
          返回此枚举常量的名称,在其枚举声明中对其进行声明。 intordinal()
          返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。



3.枚举的特点:

1:枚举列表必须写在最前面,否则编译出错
2:构造方法必须是私有的,并且可以在枚举列表中直接调用
3:枚举中的字段都是public static final特性,是枚举类本身的类型.每个字段之间有一个","号隔开,最后一个字段后面的","可以省略掉,整个字段的最后要有一
      
";"结束符号

4.枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象

5. 枚举中可以含有抽象方法,因为枚举本身就是抽象类.一旦枚举中含有抽象方法,那么在字段创建内部类的时候一定要实现该抽象方法.
 枚举重也可以定义实现方法.比如枚举都要复写父类的toString()方法.

6.枚举是final的抽象类,所以枚举不能被继承,字段也不能再赋新值

4.枚举的好处:

先看以下需求:定义一个类表示星期,有打印下一天,和当天等功能,用普通方法实现如下:

class ClassDemo {       public static void main(String[] args) {           WeekDay today = WeekDay.SAT;           System.out.println(today+"的下一天是"+today.nextDay());       }   }   class WeekDay {       //构造函数       private WeekDay(){}          //创建星期的七个对象       public final static WeekDay SUN = new WeekDay();       public final static WeekDay MON = new WeekDay();       public final static WeekDay TUE = new WeekDay();       public final static WeekDay WED = new WeekDay();       public final static WeekDay THU = new WeekDay();       public final static WeekDay FN  = new WeekDay();       public final static WeekDay SAT = new WeekDay();             //下一天的方法       public WeekDay nextDay() {                                          if(this==SUN)               return MON;           else if(this==MON)                return TUE;           else if(this==TUE)                return WED;           else if(this==WED)                return THU;           else if(this==THU)               return FN;           else if(this==FN)               return SAT;           else                return SUN;       }          //重写toString()方法       public String toString(){                                        if (this == SUN)                return "星期日";           else if(this==MON)                return "星期一";           else if(this==TUE)               return "星期二";            else if(this==WED)               return "星期三";           else if(this==THU)               return "星期四";           else if(this==FN)               return "星期五";           else               return "星期六";       }   }

以上需求若用枚举完成则可以改为:

public class EnumDemo{/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println(EnumTest.WeekDay.MON.nextDay());}public enum  WeekDay {                //创建星期的七个对象        SUN,   MON,   TUE,   WED,   THU,   FN,   SAT ;             //下一天的方法                 public WeekDay nextDay() {                                          if(this==SUN)               return MON;           else if(this==MON)                return TUE;           else if(this==TUE)                return WED;           else if(this==WED)                return THU;           else if(this==THU)               return FN;           else if(this==FN)               return SAT;           else                return SUN;       }          //重写toString()方法       public String toString(){                                        if (this == SUN)                return "星期日";           else if(this==MON)                return "星期一";           else if(this==TUE)               return "星期二";            else if(this==WED)               return "星期三";           else if(this==THU)               return "星期四";           else if(this==FN)               return "星期五";           else               return "星期六";       } }}


5:实现带有构造方法和抽象方法的枚举:


public class EnumTest {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println(EnumTest.WeekDay.MON.nextDay().day);System.out.println(EnumTest.WeekDay.valueOf("SAT").day);}                       //创建枚举       public enum WeekDay {       SUN{@Overridepublic WeekDay nextDay() {// TODO Auto-generated method stubreturn MON;}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "星期天";}},          MON{@Overridepublic WeekDay nextDay() {// TODO Auto-generated method stubreturn TUE;}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "星期一";}},     TUE{@Overridepublic WeekDay nextDay() {// TODO Auto-generated method stubreturn WED;}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "星期二";}},     WED{@Overridepublic WeekDay nextDay() {// TODO Auto-generated method stubreturn THU;}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "星期三";}},    THU {@Overridepublic WeekDay nextDay() {// TODO Auto-generated method stubreturn FN;}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "星期四";}},FN{@Overridepublic WeekDay nextDay() {// TODO Auto-generated method stubreturn SAT;}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "星期五";}},SAT(6){//使用带参数的构造函数WeekDay(int day)实例化@Overridepublic WeekDay nextDay() {// TODO Auto-generated method stubreturn SUN;}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "星期六";}};     public int day;     private WeekDay(){};     private WeekDay(int day){this.day=day;};         public abstract WeekDay nextDay();//创建抽象方法nextDay(),返回的对象是类的本身WeekDay。           public abstract String toString();//创建抽象方法toString(),返回的对象是String     }  }






原创粉丝点击