枚举

来源:互联网 发布:零售门店数据分析 编辑:程序博客网 时间:2024/06/05 00:32

一、枚举

1,为什么要有枚举

枚举就是要让莫个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错,枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这个目标。


2,用普通类定义枚举功能,

步骤:

1,私有构造方法;

2,每个元素分别用一个共有的静态成员变量表示;

3,可以有若干个公有方法或抽象方法,采用抽象方法定义next就将大量的false语句装换成了一个一个独立的类。


3,枚举的基本应用

枚举类型的常用方法

values:该方法可以将枚举类型成员以数组的形式返回;枚举类型名称.values();

valueOf:该方法可以是实现将普通字符串装换为枚举实例;枚举类型名称.valueOf();

compareTo:该方法用于比较两个枚举对象的定义时的顺序;枚举对象.compareTo();

ordinal:该方法用于得到枚举成员的位置索引;枚举对象.ordinal();

总结:枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象,例如:可以调用WeekDay.SUN.getClass().getName和WeekDay.class.getName()


二、枚举的高级使用

1,枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。

2,枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后面要有分号与其他成员分隔,如果把枚举整中的成员方法或变量等方法在枚举元素的前面,编译器会报错。

3,带构造方法的枚举

构造方法必须定义成私有的;如果有多个构造方法,该如何选择哪个构造方法?枚举源MON和MON()的效果一样,都是调用默认的构造方法。

代码示例:

public enum WeekDay{   SUN("星期天"),MON("星期一"),TUE(),WED(),THU(),FRI(),SAT();//空括号代表无参构造函数,也可以通过向构造函数中传递参数后 再向括号里传递参数   private WeekDay(){      System.out.println("First");  }   private WeekDay(String day){       System.out.println("Secound");   }}

4,带方法的枚举

定义枚举TrafficLamp;

实现普通的next方法,实现抽象的next方法:

每个元素分别是由枚举类的子类来生成实例对象,这些子类采用类似内部类的方式进行定义;

增加上表示时间的构造方法。

代码示例:

public enum TrafficLamp{   RED(30){              public TrafficLamp nextLamp(){                 return "GREEN";             }   },   GREEN(40){              public TrafficLamp nextLamp(){                 return "GREEN";              }   },   YELLOW(10){               public TrafficLamp nextLamp(){                  return "GREEN";               }   };   public abstract TrafficLamp nextLamp();   private int time;   private TrafficLamp(int time){              this.time = time;        }}


5,枚举只有一个成员时,就可以作为一种单例的实现方法。

操作枚举成员的方式:

代码示例:

//方法一public enum WeekDay{   SUN("MON"),MON("TUE"),TUE("WED"),WED("THU"),THU("FRI"),FRI("SAT"),SAT("SUN");   private String next;   private WeekDay(String next){              this.next = next;   }   public WeekDay nextDay(){              return WeekDay.valueOf(next);   }}//方法二public enum WeekDay{   SUN{              public WeekDay nextDay(){                return "MON";              }   },   MON{            public WeekDay nextDay(){                 return "TUE";         }   },   TUE{        public WeekDay nextDay(){                 return "WED";              }   },   WED{        public WeekDay nextDay(){                return "THU";              }   },   THU{        public WeekDay nextDay(){                return "FRI";         }   },   FRI{        public WeekDay nextDay(){                return "SAT";              }   },   SAT{public WeekDay nextDay(){                 return "SUN";              }   };   public abstract WeekDay nextDay();}//方法三public enum WeekDay{   SUN.MON,TUE,WED,THU,FRI,SAT;   public WeekDay nextDay(){      switch(this){         case SUN :                return MON;         case MON :                return TUE;         case TUE :                return WED;         case WED :                return THU;         case THU:                return FRI;           case FRI :                return SAT;         default :                return SAT;      }   }


三、使用枚举类型的优势

枚举类型声明提供了一种用户友好的变量定义方法,枚举了某种数据类型所有可能出现的值。特点:

1,类型安全;

2,紧凑有效的数据定义;

3,可以和程序其他部分完成交互;

4,运行效率高;

0 0
原创粉丝点击