为什么需要枚举?
枚举一般用来定义一些固定的不变的数据,JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决.(以前最先是
通过定义类,类里面定义常量来定义固定的不变的数据,后来通过定义对象,定义一系列当前对象并私有化构造器来解决这个问题,但书写比较
麻烦,所以提供枚举来解决这一问题)
JDK 5新增的 enum 关键字用于定义一个枚举类.
创建枚举格式:
enum 枚举类型名称 {
枚举对象1名称,
枚举对象2名称,
… ,
枚举对象n名称;
}
枚举类的特性:
枚举类也是一种特殊形式的Java类。
枚举类中声明的每一个枚举值代表枚举类的一个实例对象。
与java中的普通类一样,在声明枚举类时,也可以声明属性、(抽象)方法和构造函数,但枚举类的构造函数必须为私有的(这点不难理解)。
枚举类也可以实现接口、或继承抽象类。
JDK5中扩展了swith语句,它除了可以接收int, byte, char, short外,还可以接收一个枚举类型。
若枚举类只有一个枚举值,则类似java的单例模式,只有一个实例。
枚举API:
Java中声明的枚举类,均是java.lang.Enum类的孩子,它继承了Enum类的所有方法(注意,不需要再进行extends继承Enum,这个底层
处理了)。常用方法:
name() 返回枚举对象名称
ordinal() 返回枚举对象下标
valueof(Class enumClass, String name) 转换枚举对象
自定义的枚举类 在编译阶段自动生成下面方法
valueof(String name) 转换枚举对象(枚举对象调用)
values() 获得所有枚举对象数组(枚举对象调用)
枚举是编译期状态:
其实枚举也是编译期状态,在运行时JVM并不知道什么是枚举类型。这也就是说,编译器需要把枚举类型转换成普通类。(可以直接查看相应类
的.class,如:ColorEnum.class 这里面其实是个普通类