关于枚举的一些总结

来源:互联网 发布:北京计算机编程学校 编辑:程序博客网 时间:2024/06/05 02:06

枚举的概述:

              枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个。

普通的类如何实现枚举功能?

        1.私有的构造方法

    2.每个元素分别用一个公有的静态成员变量表示。

3.可以有若干公有方法或抽象方法

例如:定义一个WeekDay的类来模拟枚举功能

public  class EnumTest {


/**
* 定义一个WeekDay的类来模拟枚举功能
*/
public static void main(String[] args) {

WeekDay   weekday=WeekDay.MON;
System.out.println(weekday.nextDay());
}


}

public   class WeekDay {


/**
* 定义一个WeekDay的类来模拟枚举功能
*/
WeekDay(){

}
public final static WeekDay SUN=new   WeekDay();
public final static WeekDay MON=new   WeekDay();
public  WeekDay nextDay(){
if (this==SUN) {
return MON;
}else {
return SUN;
}
}
public String toString(){
return this==SUN ? "SUN":"MON";

}
}

注意:可以采用抽象的方法定义上文中nextDay,就可以将if和else语句转移成一个个独立的类。

上文代码改为:

public  abstract class WeekDay {


/**
* 定义一个WeekDay的类来模拟枚举功能
*/
private WeekDay(){

}
/*public final static WeekDay SUN=new   WeekDay();
public final static WeekDay MON=new   WeekDay();*/

public final static WeekDay SUN=new WeekDay(){
public WeekDay nextDay(){
return MON;

}
};
public final static WeekDay MON=new WeekDay(){
public WeekDay nextDay(){
return SUN;

}
};
public abstract WeekDay nextDay();
/*public  WeekDay nextDay(){
if (this==SUN) {
return MON;
}else {
return SUN;
}
}*/
public String toString(){
return this==SUN ? "SUN":"MON";

}
}

枚举的基本应用:

       交通灯:

public abstract class TrafficlampDemo {


/**
* 枚举交通灯
*/
public static void main(String[] args) {

System.out.println(trafficlamp.YELLOW);
System.out.println(trafficlamp.RED); 
System.out.println(trafficlamp.GREEN); 



}


public enum trafficlamp{
RED(30){
public  trafficlamp nextlamp(){
System.out.println("暂停30秒"); 
   return GREEN;
}
},
GREEN(45){
public  trafficlamp nextlamp(){
System.out.println("放行45秒"); 
return YELLOW;
}
},
YELLOW(5){
public  trafficlamp nextlamp(){
System.out.println("暂停5秒"); 
return RED;
}
};

public abstract trafficlamp nextlamp();

private int time;
private trafficlamp(int time){
this.time=time;
System.out.println("先把枚举所有元素加载进内存   "+this.name()); 


}
}
}

枚举类总结:

1、枚举类是一种特殊形式的Java类。

2、枚举类中声明的每一个枚举值代表枚举类的一个实例对象。

3、枚举类与Java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数。

但枚举类的构造函数必须为私有的(这点不难理解)。

4、枚举类也可以实现接口、或继承抽象类。

5、JDK 1.5 中扩展了switch语句,它除了可以接收int, byte, char, short,String外,还可以接收一个枚举类型。

6、若枚举类只有一个枚举值,则可以当作单例设计模式使用。

7、枚举类的实例变量是把所以的枚举实例都加载一次的。

如果调用了某个枚举类,那么该枚举类先把枚举类里面的所有元素都先加载一次。

注意:

1、枚举只有一个成员时,就可以作为一种单例的实现方式。

2、查看生成的class文件,可以看到内部类对应的class文件。

也就是枚举的元素都是一个内部类实例对象。



























































































































0 0
原创粉丝点击