您的位置:首页 > 编程语言 > Java开发

黑马程序员:jdk1.5新特性2 (枚举)

2011-07-02 22:39 405 查看
枚举
枚举 就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式
在开发阶段无法实现这一目标。
如何实现枚举
1 私有的构造方法
2 每个元素分别用一个公有的静态成员变量表示
3 可以有若干公有方法或抽象方法 ,例如要提供nextDay方法 必须是抽象的。采用抽象方法定义nextDay 就将大量的if.else语句转化为一个个独立的类。
4 在枚举元素的后面 跟着()就表示创建这个枚举元素使用的哪个构造方法
用一个简单的类来实现枚举
public abstract class WeekDay {
private WeekDay(){}
public final static WeekDay SUN=new WeekDay(){
public WeekDay nextDay() { //内部类
return MON;
} };
public final static WeekDay MON=new WeekDay(){
public WeekDay nextDay() {
return FRE;
} };
public final static WeekDay FRE=new WeekDay(){
public WeekDay nextDay() {
return SUN;
} };
public abstract WeekDay nextDay() ; //抽象方法
public String toString(){
if(this==MON){
return "MON";
}else if(this==SUN){
return "SUN";
} else{
return "FRE"; }
/* return this==MON?"MON":"SUN"*/
} }
创建一个枚举,并将里面的对象 以for增强的 方法输出
public class EnumTest {
public static void main(String[] args) {
// int len=WeekDay1.values().length;
WeekDay1[] weeks=WeekDay1.values();
for(WeekDay1 week:weeks){
System.out.println("WeekDay1 everyday:"+week);
} }
public enum WeekDay1{
MON(1),TUE,WEN,THU,FRI,SAT,SUN; //后面跟构造方法时 必须有“;”
private WeekDay1(){}
private WeekDay1(int day){}
} }
带有抽象方法的枚举(交通灯)
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 TrafficLamp(int time){this.time=time;}
private int time;
}
*枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法
*枚举元素必须位于枚举体中的最开始部分,枚举元素列表后 要有“;”与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素前面,编译器会报错。
*带构造方法的枚举
1 枚举必须定义为私有
2 如果有多个构造方法,看枚举元素后面的括号 MON和MON()都是调用的默认构造方法
MON(int time) 调用的 有参数的构造方法
*带方法的枚举 :如上例(交通灯)TrafficLamp枚举,可实现普通的next()也可实现抽象的next():
每个元素分别是由枚举的子类来生成的实例对象,这些子类采用类似内部 类的方式进行定义
*枚举只有一个成员时 就可以作为一种单例的实现方式(同static创建单一实例对象相仿并且更简单)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: