拾壹——快速归类整型常数
一、枚举的简介
在 JDK 1.5 以前,Java 并不支持枚举数据类型。在 JDK 1.5,Java 引入的一种新类型——枚举类型( Enumerated Type )。定义时,它使用 enum 关键字标识。例如,表示一周的星期几,用 SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY 就可表示为一个枚举。枚举所用的自然表示法让程序更具有可读性。
二、Java 中的枚举
JDK 1.5 以后,Java 语言中新出现的类型诸如枚举类型等一系列新的数据,这些类型的出现表明 Java 日趋完善,编程语言的日益人性化。
1.常见的枚举定义方法
在枚举类型中,一般的定义形式如下:
enum 枚举名 {枚举值表};
其中 enum 是 Java 中的关键字。在枚举值表中应罗列出所有的可用值,这些值也称为枚举元素。
例如:
enum WeekDay {Mon,Tue,Wed,Thu,Fri,Sat,Sun};
这里定义了一个枚举类型 WeekDay,枚举值共有 7 个,即一周中的 7 天。凡被说明为 WeekDay 类型变量的取值,只能是这 7 天中的某一天。
枚举变量也可用不同的方式说明,如先定义后说明、定义的同时说明或直接说明。
设有变量 a、b、c 被定义为上述的枚举类型 WeekDay,可采用以下任意一种方式。
enum WeekDay {Mon,Tue,Wed,Thu,Fri,Sat,Sun}; //先定义
enum WeekDay a,b,c; //后说明
或者为:
enum WeekDay {Mon,Tue,Wed,Thu,Fri,Sat,Sun} a,b,c; //定义的同时说明
或者为:
enum {Mon,Tue,Wed,Thu,Fri,Sat,Sun} a,b,c //直接说明,即定义无名枚举
2.在程序中使用枚举
如果使用 Java 中的 Enum 方法,代码量将大大减少。同时,代码的可修改性与可读性也会相应地提高。
例如:
//在Java中使用枚举
enum MyColor {红色,绿色,蓝色};
public class EnumColor
{
public static void main(String[] args)
{
MyColor c1 = MyColor.红色; //获取红色
System.out.println(c1);
MyColor c2 = MyColor.绿色; //获取绿色
System.out.println(c2);
MyColor c3 = MyColor.蓝色; //获取蓝色
System.out.println(c3);
}
}
通过 Java 提供的枚举类型,可以很轻松地调用枚举中的每一种颜色。而且,使用此方式还可以避免使用接口实现枚举的操作。
3.在 switch 语句中使用枚举
使用 Enum 关键字创建的枚举类型,也可以直接在多处控制语句中使用,如 switch 语句等。在 JDK 1.5 之前,switch 语句只能用于判断字符或数字,它并不能对在枚举中罗列的内容进行判断和选择。而在 JDK 1.5 之后,通过 Enum 创建的枚举类型,也可以被 switch 判断使用。
例如:
//在Java中使用枚举
enum MyColor {红色,绿色,蓝色};
public class EnumSwitch
{
public static void main(String[] args)
{
MyColor c1 = MyColor.绿色; //定义MyColor枚举变量c1,并赋值为“绿色”
switch(c1) //用switch方式来比较枚举对象
{
case 红色:
{
System.out.println("红色");
break;
}
case 绿色:
{
System.out.println("绿色");
break;
}
case 蓝色:
{
System.out.println("蓝色");
break;
}
}
}
}
由于 Java 采用的是 Unicode 的字符串编码方式,所以枚举值也可支持中文。由此看出,在 JDK 1.5 之后,switch 同样可以用来判断一个枚举类型,并对枚举类型作出有效选择。这有助于增加代码的可读性和延伸性。
三、枚举和枚举关键字
枚举类型的出现,有助于简洁程序的代码量,减少出错量。在大多数情况下,枚举类和枚举关键字是相互依存的。枚举关键字是定义枚举类型时必不可少的声明,而枚举类则是规定的枚举类型母类。
1.枚举类
枚举类( Enum 类 )是在 Java.lang 包下定义的一个公共类,它的作用是用来构造新的枚举类型。这是在 JDK 1.5 之后 Java 推出的一个新的类。用来弥补关于枚举这一常用集合在 Java 中的不足。同时,Enum 类中的构造方法可方便对代码的操作。
在 JDK API 中可以看到,在 Enum 类中定义了大约十多个方法,每一种方法都是对用 Enum 创建的枚举对象实时操作,所以 Enum 类是一个完整的类型。它拥有自己的方法,当创建一个关于 Enum 的类型对象时,便可调用其中的方法来完善对于枚举类型的操作。
下表列出了 Enum 类中的主要方法: