java(二十二)枚举

枚举类:实例有限而且固定的类。

在早期,使用一些静态常量来表示枚举,但存在很多问题:类型不安全、没有命名空间,打印输出的值没有具体意义。

jdk 1.5 以后添加了枚举类。用关键字enum来表示,跟class、interface的地位是相同的。

枚举类是一种特殊的类:

  1. 继承了 java.lang.Enum 而不是Object类,所以不能显式继承其他父类。java.lang.Enum 类实现了两个接口:java.lang.Serializable 和 java.lang.Comparable。

  2. 使用enum定义、非抽象的枚举类默认会用final修饰,因此不能派生子类。

  3. 枚举类的构造器只能用private来修饰。

  4. 枚举类的所有实例必须显式在第一行声明,否则永远不能构建实例。


如果想要使用枚举类的某个实例,可以用 枚举类名.实例名 的形式调用。

枚举类提供了一个values方法,可以很方便的用来遍历枚举类:

for( 枚举类名 s : 枚举类名.values() ){

}

注意: jdk 1.5 以后,switch控制语句可以使用枚举类,case语句判断时直接用枚举类的实例名,不用加枚举类的限定。

java.lang.Enum类提供了几个方法:

int compareTo() :比较顺序。

String name() :返回该枚举类实例的名称。

String toString() :与name() 方法相似,也是返回实例的名称,但是更为常用。

int ordinal() :返回枚举实例在枚举类中的索引值。


实现接口的枚举类:

可以由枚举类来实现接口的方法,这样所有的枚举值调用同一个方法。

也可以每个枚举值分别实现接口的方法,这样调用每个枚举值的方法的时候就不一样。


包含抽象方法枚举类:

不同的枚举值对同一个方法有不同的实现的时候,可以定义这个方法为抽象方法。然后四个枚举值提供不同的实现。

在枚举类里定义抽象方法时,不能显式的为枚举类添加abstract关键字,但系统会隐式的添加。

因为枚举类需要显式的创建枚举值,所以每个枚举值必须提供抽象方法的实现。



你可能感兴趣的:(java(二十二)枚举)