A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 燿陚√揚葳 中级黑马   /  2014-7-5 23:01  /  984 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 燿陚√揚葳 于 2014-7-8 12:07 编辑

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

枚举的原理:如要定义星期几或性别的变量,该怎么定义?假设引用1~7表示周一到周日,但有人可能会写成int WeekDay=0;
如代码:
abstract class WeekDay{
private WeekDay(){}
public static final WeekDay Sun=new WeekDay(){
public WeekDay nextDay(){
return Mon;
}
};
public static final WeekDay Mon=new WeekDay(){
public WeekDay nextDay(){
return Sun;
}
};
public abstract WeekDay nextDay();//采用抽象方法定义nextDay就将大量的if else语句转移成了一个个独立的类

public String toString(){
return this==Sun?"Sun":"Mon";
}

}


枚举的格式:public enum 类名{}

public enum WeekDay{
Sun,Mon,Tue;//元素列表,当有其他方法时应该放在元素列表的后面并加“;”如果没有其他方法则可以不写“;”

//枚举中的构造方法必须是私有的
private WeekDay(){}
private WeekDay(int day){}//如果想要调用这个有参数的方法那么直接在元素中调用即可;如:Mon(2)
}

抽象方法的枚举:

public enum TrafficLamp{
Red(30){
public TrafficLamp nextLamp(){
return Green;
}
},
Green(45){
public TrafficLamp nextLamp(){
return Yellow;
}
},
Yellow(15){
public TrafficLamp nextLamp(){
return Red;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){
this.time=time;
}
}
这里要注意的是,当枚举只有一个成员时,就可以作为一种单列的实现方式

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马