枚举是JDK1.5中引入的特性,尽管现在都已经发展到JDK1.7,枚举早已算不上新特性,但由其原本被剔除而后又被引入的经历,我们便可了解到它的使用越来越频繁。
枚举的用处在于,当一种变量只有几种可能的取值或者设计者希望限定其取值时,就可以将其定义成枚举类型,这样,变量的值就仅限于列举出来的值的范围内。同时,枚举类型也提供了更多处理常量的方法。
每周都有7天这就是现实情况中的一种限定变量的情况,由于东西方文化的不同,对每周开始的时间定义有差别,我们习惯于周一起始,而西方人普遍视周日为每周的第一天。因此在程序开发时,不论是按照东方还是西方的认知,都有必要以枚举类型来限定一周日期的值与起始。下面是示例代码:
public class EnumDemo{
public static void mian(String[] args){
Weekday wd=Weekday.FRI;
System.out.println(wd);
System.out.println(wd.name()); //打印变量名字。
System.out.println(wd.ordinal()); //打印该变量的索引。索引从0开始。
System.out.println(Weekday.valueOf("SUN").toString()); //valueOf()方法将String类型变成对应的枚举类型的变量。
System.out.println(Weekday.values()); //values()方法把所有枚举对象变成数组。
}
public enum Weekday{ SUN,MON,TUE,WED,THI,FRI,SAT } //相当于静态成员;调用时,只需Weekday。
上述代码是枚举类型中定义常量组的情况,下面来看枚举类型的构造函数。先确定一些规则:枚举元素必须位于枚举体中的首行;枚举类构造方法只能用private来修饰;枚举只有一个成员时,就可以作为一种单例的实现方式。
public enum Weekday{
SUN(1),MON(),TUE,WED,THI,FRI,SAT; // 枚举元素MON和MON()的效果一样,都是调用默认的构造方法。
//创建默认的默认构造方法
private WeekDay(){
System.out.println("first");
}
//创建带参数的构造方法
private WeekDay(int day){
System.out.println("second");
}
}
再复杂一些的枚举类型应用就是带有抽象方法的枚举,下面的交通灯示例代码很好的给予了展现。
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;}
}
上述代码中三色灯部分的情形就是new子类的对象,并且调用父类的有参的构造方法,实例对象创建完后再以引用名称进行引用。
810

被折叠的 条评论
为什么被折叠?



