首页 > 代码库 > java基础篇2之枚举
java基础篇2之枚举
1、为什么要有枚举
问题:要定义星期几或者性别的变量,该怎么定义?
假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday=0;
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则编译器就会报错,
枚举可以让编译器在编译时就可以控制源程序中填写的非法制,普通变量的方式在开发阶段无法实现这一目标
2、用普通类如何实现枚举功能,定义一个WeekDay的类来模拟枚举功能
- 私有的构造方法
- 每个元素分别用一个公有的静态成员变量表示
- 可以有弱冠公有方法或者抽象方法,例如,要提供nextDay方法必须使抽象的
采用抽象方法定义nextDay就将大量的if else语句庄毅成一个个独立的类。
public class WeekDay{ private WeekDay(){} public final static WeekDay SUN = new WeekDay(){ @Override public WeekDay nextDay(){ return MON; } }; public final static WeekDay MON = new WeekDay(){ @Override public WeekDay nextDay(){ return SUN; } }; public abstract WeekDay nextDay(); /*public WeekDay nextDay(){ if(this == SUN){ return MON; }else{ return SUN; } }*/ public String toString(){ return this ==SUN?"SUN":"MON"; } } public class EnumTest{ WeekDay weekday = WeekDay.SUN; System.out.println(weekday.toString()); System.out.println(weekday.nextDay()); }
3、枚举的基本应用
扩展:枚举类的values,valueOf,name,toString,ordinal方法
总结:枚举是一种特殊的类,其中每个元素都是该类的一个实例对象,例如 调用WeekDay.SUN.getClass().getName
public class EnumTest{ public static void main(String[] args){ WeekDay weekday2 = WeekDay.FRI; System.out.println(weekday2); WeekDay.valueOf("SUN").toString(); WeekDay.values().length; } public enum WeekDay{ SUN,MON,TUE,WED,THI,FRI,SAT } }
4、带有构造方法的枚举
public class EnumTest{ public static void main(String[] args){ WeekDay weekday2 = WeekDay.FRI; System.out.println(weekday2); WeekDay.valueOf("SUN").toString(); WeekDay.values().length; } public enum WeekDay{ SUN(1),MON,TUE,WED,THI,FRI,SAT; //放在参数列表之后 private WeekDay(){...}; private WeekDay(int day){...}; } }
5、带有抽象方法的枚举
//子类实现父类的抽象方法 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; } }
枚举只有一个成员时,就可以作为一个单例的实现方式
java基础篇2之枚举
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。