枚举类型ENUM的使用

来源:互联网 发布:python list生成字典 编辑:程序博客网 时间:2024/04/30 09:26

    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();用于遍历枚举的所有枚举值。



1 0
原创粉丝点击