Java基础加强: Jdk1.5新特性 枚举

时间:2021-06-05 19:41:18

 

         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 WUEnew 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();

}

 

}