java(二十二)枚举

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

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

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

枚举类是一种特殊的类:继承

  1. 继承了 java.lang.Enum 而不是Object类,因此不能显式继承其余父类。java.lang.Enum 类实现了两个接口:java.lang.Serializable 和 java.lang.Comparable。索引

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

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

  4. 枚举类的全部实例必须显式在第一行声明,不然永远不能构建实例。class


若是想要使用枚举类的某个实例,能够用 枚举类名.实例名 的形式调用。jdk

枚举类提供了一个values方法,能够很方便的用来遍历枚举类:命名空间

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

}

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

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

int compareTo() :比较顺序。

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

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

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


实现接口的枚举类:

能够由枚举类来实现接口的方法,这样全部的枚举值调用同一个方法。

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


包含抽象方法枚举类:

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

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

由于枚举类须要显式的建立枚举值,因此每一个枚举值必须提供抽象方法的实现。

相关文章
相关标签/搜索