2018-05-12
枚举
一、枚举的定义以及底层分析特点
JDK1.5引入了新的数据类型——枚举,是一个特殊的类。就是固定的多个对象的集合。
定义格式:
[修饰符] enum 枚举类名{
常量A,常量B,常量C;
}
我们自定义的枚举类型,在编译(底层)都是直接继承于java.liang.Enum类,Enum是所有枚举的父类。
枚举类的特点:
1、枚举的直接父类java.liang.Enum,但不能显示继承Enum。
2、枚举就相当于一个类,可以定义构造方法、成员变量、普通方法和抽象方法。
3、默认私有的构造方法。
4、每个实例分别用全局常量表示,枚举类的对象是固定的,实例个数有限,不能使用new来创建。
5、枚举实例必须位于枚举体中最开始的部分,枚举实例列表后要有分号和其他成员变量相分隔。
6、枚举实例后有花括号时,该实例是匿名内部类的对象(查看编译后的class文件)。
----------------------------------------------------------------------------------------------------------------------
二、枚举的使用
1、枚举中都是全局静态常量,所以可以使用枚举类名调用。
Weekday day = Weekday.MONDAY;
2、因为java.liang.Enum类是所有枚举类的父类,所以所有的枚举对象可以调用Enum类中的方法。
String name = 枚举对象.name();//返回枚举对象的常量名称
int ordinal = 枚举对象.ordinal();//返回枚举对象的序号,从0开始
3、编译器生成的枚举类的静态方法
枚举类型[ ] values();
Weekday[] ws = Weekday.values();//返回当前枚举类型的所有常量,使用一个数组封装起来。
4、switch也支持操作枚举类型
JDK1.6之前的switch语句只支持int,char,enum类型,支持枚举是因为底层使用的是枚举对象的ordinal,而ordinal的类型是int类型
5、枚举的单例设计模式
参考:http://softbeta.iteye.com/blog/1185573