枚举

来源:互联网 发布:程序员工作流程 编辑:程序博客网 时间:2024/06/05 18:03


-----------------

枚举:

-------------------------------------------------------------------------
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。
注意事项
1.枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。
2.构造方法必须私有。
3.当枚举只有一个成员时可以作为一种单例的实现模式。
枚举中常用方法和带有构造方法的枚举.

<span style="font-size:14px;">public class EnumTest {      public static void main(String[] args) {          WeekDay weekday2 = WeekDay.FRI;          System.out.println(weekday2);          System.out.println(weekday2.name());          System.out.println(weekday2.ordinal());//排行          System.out.println(WeekDay.valueOf("SUN"));//将字符串SUN转换成WeekDay对象          System.out.println(WeekDay.values().length);//values()返回一个包含所有枚举元素的数组。      }          public enum WeekDay{          //元素列表必须放在最前面,构造方法必须是私有的。Mon()和Mon的效果是相同的都是调用默认的构造方法          SUN(1),MON(),TUE,WED,THI,FRI,SAT;          private WeekDay(){System.out.println("first");}          private WeekDay(int day){System.out.println("second");}      }      public enum TrafficLamp{          RED(30){              @Override              public TrafficLamp nextLamp() {                  // TODO Auto-generated method stub                  return GREEN;              }          },          GREEN(45){              @Override              public TrafficLamp nextLamp() {                  // TODO Auto-generated method stub                 return YELLOW;             }          },          YELLOW(5){              @Override              public TrafficLamp nextLamp() {                  // TODO Auto-generated method stub                  return RED;              }          };          public abstract TrafficLamp nextLamp();          private int time;          private TrafficLamp(int time){this.time = time;}      }  }  </span>


-----------------------------------------------------------------------------------------------------------

枚举的基本应用

   a.定义一个Weekday的枚举

   b.枚举类的values,valueOf,name,toString,ordinal等方法

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

      可以调用WeekDay.SUN.getClass().getName和WeekDay.class.getName()方法。

 

<span style="font-size:14px;"><SPAN style="FONT-SIZE: 14px">public enum WeekDay{          //枚举创建时,调用构造方法           SUN(4),MON(),TUES,WES,THUR,FRI,SAT;          private WeekDay(){System.out.println("first");}          private WeekDay(int x){System.out.println("second");}            }</SPAN>  </span>


带有构造方法和方法的枚举举例

 ------------------------------------------------------------------------------------------------------

<span style="font-size:14px;"><SPAN style="FONT-SIZE: 14px">public enum TrafficLamp{          //下边的一个代码,可以看出TrafficLamp子类   的一个对象,对象名是RED,子类名未知。           RED(30){              public  TrafficLamp nextLamp(){                  return GREEN;              }          },          GREEN(45){              public  TrafficLamp nextLamp(){                  return YELLOW;              }          },          YELLOW(15){              public  TrafficLamp nextLamp(){                  return RED;              }                     };                    public abstract TrafficLamp nextLamp();          @SuppressWarnings("unused")          private int time;          private TrafficLamp(int time){this.time =time;}      }  </SPAN></span>

-------------------------------------------------------------------------------------------------------------------------------------------

总结
枚举,预先给对象定义好一些值,在给对象赋值时,如果不是指定的值,就报错,
  不能通过编译。 
         枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法
  枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后边要有分号与其他成员分隔。
         把枚举中的成员方法或变量等放在枚举元素的前边,编译器会报错。
  
    a.带构造方法的枚举的特点
       构造方法必须定义成私有的;
       枚举元素MON和MON()的效果一样,都是调用默认的构造方法。
    b.带方法的枚举
    
    c.当枚举只有一个成员时,就可以作为一个单例的实现方式

<span style="font-size:14px;"><SPAN style="FONT-SIZE: 14px">public static void main(String[] args) {          WeekDay1 weekDay = WeekDay1.MON;          System.out.println(weekDay.nextDay());          WeekDay weekDay1 = WeekDay.MON;          //枚举的方法           System.out.println(weekDay1);          System.out.println(weekDay1.name());          System.out.println(weekDay1.ordinal());          //枚举的静态方法           System.out.println(WeekDay.valueOf("SUN"));          System.out.println(WeekDay.values().length);                  }</SPAN>  </span>




原创粉丝点击