枚举类:实例有限并且固定的类。java
在早期,使用一些静态常量来表示枚举,但存在不少问题:类型不安全、没有命名空间,打印输出的值没有具体意义。
安全
jdk 1.5 之后添加了枚举类。用关键字enum来表示,跟class、interface的地位是相同的。spa
枚举类是一种特殊的类:继承
继承了 java.lang.Enum 而不是Object类,因此不能显式继承其余父类。java.lang.Enum 类实现了两个接口:java.lang.Serializable 和 java.lang.Comparable。索引
使用enum定义、非抽象的枚举类默认会用final修饰,所以不能派生子类。接口
枚举类的构造器只能用private来修饰。it
枚举类的全部实例必须显式在第一行声明,不然永远不能构建实例。class
若是想要使用枚举类的某个实例,能够用 枚举类名.实例名 的形式调用。jdk
枚举类提供了一个values方法,能够很方便的用来遍历枚举类:命名空间
for( 枚举类名 s : 枚举类名.values() ){
}
注意: jdk 1.5 之后,switch控制语句可使用枚举类,case语句判断时直接用枚举类的实例名,不用加枚举类的限定。
java.lang.Enum类提供了几个方法:
int compareTo() :比较顺序。
String name() :返回该枚举类实例的名称。
String toString() :与name() 方法类似,也是返回实例的名称,可是更为经常使用。
int ordinal() :返回枚举实例在枚举类中的索引值。
实现接口的枚举类:
能够由枚举类来实现接口的方法,这样全部的枚举值调用同一个方法。
也能够每一个枚举值分别实现接口的方法,这样调用每一个枚举值的方法的时候就不同。
包含抽象方法枚举类:
不一样的枚举值对同一个方法有不一样的实现的时候,能够定义这个方法为抽象方法。而后四个枚举值提供不一样的实现。
在枚举类里定义抽象方法时,不能显式的为枚举类添加abstract关键字,但系统会隐式的添加。
由于枚举类须要显式的建立枚举值,因此每一个枚举值必须提供抽象方法的实现。