---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
为什么要定义枚举?
问题:要定义星期几或性别的变量,该怎么定义?
假设用1-7分别表示星期一到星期日,(一般0表示星期日 6表示星期六)
但有人可能会写成int weekday = 0;或即使使用常量方式也无法阻止意外。
什么是枚举?
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
用普通类模拟枚举的实现原理
示例代码如下: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?"SUN":"MON"; } } public class Demo{ public static void main(String[] args){ WeekDay weekDay=WeekDay.MON; System.out.println(weekDay.nextDay()); } }
java5枚举的基本应用
示例代码如下:public class Demo{ public static void main(String[] args){ WeekDay weekDay=WeekDay.MON; sop(weekDay); sop(weekDay.name()); sop(weekDay.ordinal()); sop(WeekDay.valueOf("WED").toString()); sop(WeekDay.values().length); } public enum WeekDay{ SUN,MON,TUE,WED,THU,FRI,SAT; } public static void sop(Object obj){ System.out.println(obj); } }
实现带有构造方法的枚举
示例代码如下:
public class Demo{ public static void main(String[] args){ WeekDay weekDay=WeekDay.MON; sop(weekDay); sop(weekDay.name()); sop(weekDay.ordinal()); sop(WeekDay.valueOf("WED").toString()); sop(WeekDay.values().length); } public enum WeekDay{ SUN(0),MON(1),TUE(2),WED,THU,FRI,SAT; private WeekDay(){ sop("无参构造方法"); } private WeekDay(int day){ sop("有参构造方法"); } } public static void sop(Object obj){ System.out.println(obj); } }
实现带有抽象方法的枚举
示例代码如下:
public class Demo{ public static void main(String[] args){ TrafficLamp red=TrafficLamp.RED; System.out.println(red.nextLamp()); } 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; } } }
---------------------- ASP.Net+Android+IO开发S 、 .Net培训 、期待与您交流! ----------------------