您的位置:首页 > 其它

枚举类型ENUM的使用

2015-02-28 20:30 357 查看
JDK 5出现的新特性,新增的enum关键字用于定义枚举类。Java中声明的枚举类,均是继承自Enum。

为什么需要枚举?

Java的一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前的程序猿们都采用自定义带有枚举功能的类解决,Java5新特性出现后可以直接使用枚举予以解决。

枚举类具有以下特性:

① 枚举类是一种特殊形式的java类;

② 枚举类中声明的每一个枚举值代表枚举类的一个实例对象;

③ 与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但是构造函数必须是私有的。(为避免还可以使用该方法的构造函数创建其他对象);

④ 枚举类也可以实现接口或者继承抽象类;

⑤ JDK 5 中扩展的switch语句,它除了可以接受int、short、byte、char外,还可以接受一个枚举类型;

⑥ 若枚举类只有一个枚举值,则可以当作单态设计模式(内存始终只有一个该类的对象)使用;

自定义带有枚举功能的类示例代码(例如学生成绩五个等级):

class Grade{
private Grade(){}	//Grade方法的构造函数,私有是为了限制数据不能是任意的
public static final Grade A=new Grade();
public static final Grade B=new Grade();
public static final Grade C=new Grade();
public static final Grade D=new Grade();
public static final Grade E=new Grade();
}

一个枚举也可以有构造函数、字段和方法。例如每周都有7天,分别为MON、TUE、 WED、 THU、FRI、SAT、 SUN,我们在使用这种类型的数据时候,也可以使用枚举。示例代码:

enum WeekDay {
A("MON"), B("TUE"), C("WED"), D("THU"), E("FRI"), F("SAT"), G("SUN");
private String value;<span style="white-space:pre">		</span>//封装每个对象对应的字段

private WeekDay(String wd) {
this.value = wd;
}

public String getValue() {
return this.value;
}
}
特别注意的是:定义枚举类的时候构造函数必须要私有。

带抽象方法的枚举示例代码:

enum WeekDay {
A("MON") {
public String localValue() {
return "周一";
}
},
B("TUE") {
public String localValue() {
return "周二";
}
},
C("WED") {
public String localValue() {
return "周三";
}
},
D("THU") {
public String localValue() {
return "周四";
}
},
E("FRI") {
public String localValue() {
return "周五";
}

},
F("SAT") {
public String localValue() {
return "周六";
}
},
G("SUN") {
public String localValue() {
return "周日";
}
};
private String value;

private WeekDay(String value) {
this.value = value;
}

public String getValue() {
return this.value;
}

public abstract String localValue();
}
注意:在定义枚举时,定义了抽象方法时,需要在创建每个枚举对象时候实现该抽象方法;

由于枚举类继承自Enum,所以其继承Enum的所有方法,枚举类中的常用方法有:

name();返回次枚举常量的名称,在其枚举声明中对其进行声明;

ordinal();返回枚举常量的序数(它在枚举声明中的位置,其中初始常量为0);

valueof(class enumClass,String name);返回带指定名称的指定枚举类型的枚举常量;

values();用于遍历枚举的所有枚举值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: