Java 枚举
来源:互联网 发布:淘宝代销如何收款 编辑:程序博客网 时间:2024/04/28 01:26
为什么要用枚举?
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则编译器就会
报错。
用普通类的方法模拟枚举的实现原理
public class WeekDay {private WeekDay(){}public final static WeekDay SUN=new WeekDay();public final static WeekDay MON=new WeekDay();public WeekDay nextDay(){if(this==SUN){return MON;}else{return SUN;}}public String toString(){return this==SUN?"SUN":"MON";}}public class EnumTest{public static void main(String []args)throws Exception{WeekDay weekday=WeekDay.MON;System.out.println(weekday.nextDay());}}结果打印输出:SUN
采用抽象方法---把大量的if-else语句转移成一个个独立的类
public abstract class WeekDay {private WeekDay(){}public final static WeekDay SUN=new WeekDay(){@Overridepublic WeekDay nextDay() {// TODO Auto-generated method stubreturn MON;}};//内部类没有名称是WeekDay的子类并且创建了一个对象public final static WeekDay MON=new WeekDay(){@Overridepublic WeekDay nextDay() {// TODO Auto-generated method stubreturn SUN;}};public abstract WeekDay nextDay();public String toString(){return this==SUN?"SUN":"MON";}}public class EnumTest{public static void main(String []args)throws Exception{WeekDay weekday=WeekDay.MON;System.out.println(weekday.nextDay());}}同样可以得到
以下是一个基本的枚举类
public class EnumTest{public static void main(String []args)throws Exception{//枚举定义变量的时候只能给定义的元素WeekDay week2=WeekDay.SUN;System.out.println(week2);System.out.println(week2.name());//打印自己的名字System.out.println(week2.ordinal());//排行System.out.println(Week2.valueOf("SUN"));//怎样把一个串变成一个对象(valueOf())System.out.println(Week2.values().length)//把枚举中的每个元素都存储在数组里}public enum WeekDay{SUN,MON,TUE,WEN,THI,FRI,SAT;}}
实现带有构造方法的枚举
public class EnumTest{public static void main(String []args)throws Exception{//枚举定义变量的时候只能给定义的元素WeekDay week2=WeekDay.SUN;System.out.println(week2);System.out.println(week2.name());//打印自己的名字System.out.println(week2.ordinal());//排行System.out.println(Week2.valueOf("SUN").toString());//怎样把一个串变成一个对象(valueOf())System.out.println(Week2.values().length)//把枚举中的每个元素都存储在数组里}public enum WeekDay{SUN(1),MON,TUE,WEN,THI,FRI,SAT;//实现构造方法的枚举----要求要是私有的并且在元素后面private WeekDay(){System.out.println("first");}//默认调用private WeekDay(int day){System.out.println("second");}//需要在元素写成SUN(1)}}
实现带有抽象方法的枚举
public class EnumTest{public static void main(String []args)throws Exception{new Date(300){};//子类的构造方法要调用父类构造方法}public enum TrafficLamp{RED(30){public TrafficLamp nextLamp(){return GREEN;}},GREEN(45){public TrafficLamp nextLamp(){return YELLOW;}},YEELOW(5){public TrafficLamp nextLamp(){return RED;}};public abstract TrafficLamp nextLamp();private int time;private TrafficLamp(int time){this.time=time;}}}
- JAVA 枚举
- java枚举
- java枚举
- Java 枚举
- Java 枚举
- Java 枚举
- java 枚举
- java 枚举
- java枚举
- java枚举
- java枚举
- java枚举
- Java枚举
- java枚举
- java 枚举
- java枚举
- Java枚举
- Java枚举
- 虚拟硬盘涉及到的技术
- java自定义异常类
- <%@ include file=""%>与<jsp:include page=""/>区别
- EBMIDE——ORM数据实体编辑器
- MyEclipse中Spring工程使用@Resource注释的问题
- Java 枚举
- System.Guid[] 不包含 Contains 的定义,并且最佳扩展方法重载参数无效
- cacti 监控 mysql 的几种方法 _ 参考用
- 提高编译速度办法
- 影响百度文库通过率因素
- Gson解析Json数据
- C语言运算符优先级
- boost::tuple 用法详解
- .net中日至框架log4net.dll如何使用