概述
枚举类型(Enum Types)是JDK1.5之后加入的新的特性。枚举是类(class),单比类多了些特殊的约束。
特性
枚举中成员变量是有一组枚举类型的成员变量(一定有)和其他类型的成员变量(可能有)组成的,我们把这种特殊的成员变量成为枚举变量(enum type’s fields)。枚举的构造函数(constructor)决定成员变量指向的实例的类型。枚举类方法的参数(arguements)必须是枚举的成员变量。
枚举变量的命名
因为枚举变量是常量,所以枚举变量的命名规范是所有的字母大写。
枚举类的定义
在JDK1.5后,有专门的关键字enum来表示枚举。下面我用一个枚举类来定义罗盘。
//使用enum关键字定义枚举类
public enum Compass {
EAST, SOUTH, WEST, NORTH
}
这样我们就定义了一个枚举类。需要注意的是在定义好这个compass类后,我的取值只能从这四个值中取。调用取到的值的toString()方法(例如:Compass.EAST.toString()),返回的结果是这个常量的名字的字符串(”EAST“)。
在switch循环中使用枚举
在JDK5之后,在switch循环中可以使用枚举。以下是例子:
class CompassTest {
Compass compass;
public CompassTest(Compass compass) {
this.compass = compass;
}
public void tellCompass() {
switch (compass) {
case EAST:
System.out.println("go to east!");
break;
case WEST:
System.out.println("go to west!");
break;
case NORTH:
System.out.println("go to north!");
break;
case SOUTH:
System.out.println("go to south");
}
}
public static void main(String[] args) {
CompassTest compassTest = new CompassTest(Compass.EAST);
compassTest.tellCompass();
}
}
输出:
go to east!
枚举的构造函数(constructor)
枚举类型实际上是继承了(extends)了Enum类的Java类。相比于普通类,枚举类有以下特点:
- 枚举类的构造函数是私有的。这样就确保了外界不能通过构造方法来添加成员变量,要想调用调用枚举的成员变量吗,只能从预定义好的成员变量中选择。
- 枚举类的构造函数传入的是枚举类的其他类型成员变量,通过构造函数给其他成员变量赋值。
枚举的成员变量
枚举的成员变量是枚举类型,如果这个枚举类型里面还有其他成员变量(例如,String,int),在这个枚举类型的后面加上一个小括号,里面写上要传入的实例的值(例如(NORTH(“north”,1)))。每个枚举成员变量之间有逗号间隔,最后用分号结尾。
枚举的方法
枚举和普通类一样有方法。但是枚举方法和普通类的方法相比,有一定的限制。
1.传入枚举类型
2.传入枚举类型的参数(构造函数中决定)
枚举的循环
已Compass为里,用Compass.values()可以获取到成员枚举变量的实例。
枚举的equals
因为枚举中的枚举实例都是常量(constant),所以枚举的实例在程序中只有一份,所以枚举的equals实际上与==的比较结果都是相同的(因为引用的地址只有一份)。