枚举(Enum)
1.什么是枚举
枚举就是让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。
枚举可以让编译器在编译时就可以控制程序中填写的非法代码。
2.用普通类实现枚举的功能
步骤:
私有够造方法;
每个元素分别用一个公用的静态成员变量表示;
可以有若干公用方法或抽象方法。
package cn.itcast.day1;3.应用
public class EnumTest {
}
abstract class Weekday{
private Weekday(){
}
public final static Weekday SUN = new Weekday(){
@Override
public Weekday nexDay() {
// TODO Auto-generated method stub
return MON;
}
};
public final static Weekday MON = new Weekday(){
@Override
public Weekday nexDay() {
// TODO Auto-generated method stub
return SUN;
}
};
public abstract Weekday nexDay();
public String toString(){
return this==SUN?"SUN":"MON";
}
}
public enum WeekDay{(1)一些普通方法:.name()名字;.ordinal() 枚举的元素在枚举中的顺序,如WeekDay.SUN.ordinal()的值为0;
SUN(1),MON(),TUE,WED,THI,FRI,SAT;
private WeekDay(){System.out.println("first");}
private WeekDay(int day){System.out.println("second");}
}
(2)一些静态方法:
WeekDay.valueOf("SUN")将特定的字符串转换成实例;
WeekDay.values() 获得枚举中所有元素组成的数组;
4.带有构造方法的枚举(例子见3)
注意:
a.构造方法必须写在所有元素的列表后面;
b.枚举的构造方法必须都是私有的。
枚举的袁术后带有一对括号,括号内对应相应参数列表的构造函数,如SUN对象第二个构造函数。
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;}
}
6.如果枚举只有一个成员时,就可以作为单例的实现形式。