Java基础加强: Jdk1.5新特性 枚举
用普通类实现枚举功能:
定义一个WeekDay类来模拟枚举功能。方法:
1.私有的构造方法
2.每个元素分别用一个公有的最终的静态成员变量来表示
3.可以有若干公有方法或抽象方法,若有抽象方法则静态成员变量必须实现抽象方法
代码如下:
package cn.itcast;
public abstract class WeekDay {
public abstract WeekDay nexDay();
private WeekDay(){}
public final static WeekDay MON=new WeekDay(){
@Override
public WeekDay nexDay() {
// TODO 自动生成的方法存根
return TUS;
}
};
public final static WeekDay TUS=new WeekDay() {
@Override
public WeekDay nexDay() {
// TODO 自动生成的方法存根
return WUE;
}
};
public final static WeekDay WUE= new WeekDay() {
@Override
public WeekDay nexDay() {
// TODO 自动生成的方法存根
return MON;
}
};
public String toString(){
if(this==MON){
return "MON";
}else if(this==TUS){
return "TUS";
}else
return "WUE";
}
}
枚举的常用属性和方法
代码显示:
public enum Weekday{MON,TUE,WES,THU;}
System.out.println(Weekday.MON.hashCode());
System.out.println(Weekday.MON.ordinal());
System.out.println(Weekday.values().length);
System.out.println(Weekday.valueOf("THU"));
枚举含有抽象方法时的代码:
一个关于交通灯的代码
package cn.itcast;
public class EnumeTest1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
TraficLamp trl=TraficLamp.RED;
System.out.println("当前交通灯为:"+trl);
while(true){
System.out.println("下一盏灯是");
trl=trl.nexLamp();
System.out.print(trl);
}
}
public enum TraficLamp{
RED{
@Override
public TraficLamp nexLamp() {
// TODO 自动生成的方法存根
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
//System.out.println("red");
return GREEN;
}
},GREEN{
@Override
public TraficLamp nexLamp() {
// TODO 自动生成的方法存根
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
//System.out.println("green");
return YELLO;
}
},YELLO{
@Override
public TraficLamp nexLamp() {
// TODO 自动生成的方法存根
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
//System.out.println("yello");
return RED;
}
};
public abstract TraficLamp nexLamp();
}
}