您的位置:首页 > 其它

关于枚举的一些总结

2014-08-10 21:06 281 查看

枚举的概述:

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

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

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文件。

也就是枚举的元素都是一个内部类实例对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: