枚举
从Java5开始,出现了一种新的类型:枚举,枚举其实是一个特殊的Java类.
定义格式:
修饰符 enum 类名
{
常量A,常量B,常量C;
}
枚举特点:
① 枚举的直接父类java.lang.Enum,但是不能显示继承Enum。
② 枚举就相当于一个类,可以定义构造方法、成员变量、普通方法和抽象方法。
③ 默认私有的造方法,即使不写访问权限也是private。(假的构造器)
④ 每个实例分别用一个全局常量表示,枚举类的对象是固定的,实例个数有限,不能使用new关键字。
⑤ 枚举实例必须位于枚举体中的最开始部分,枚举实例列表的后要有分号与其他成员相分隔。
⑥ 枚举实例后有花括号时,该实例是枚举类的匿名内部类对象(查看编译后的class文件)。
枚举的操作:
1):获取枚举类型的数组(该类所有的常量)
格式:枚举类名 [] 变量名 = 枚举类名 . values();
Weekday[] days = Weekday.values();
2):把一个字符串转换为枚举的常量对象.
Weekday day = Weekday.valueOf("THURSDAY");
类似于day = THURSDAY; 只不过是把枚举的一个常量赋给枚举的一个对象。
3):获取枚举的名称
格式String 变量名 = 枚举类名 . 枚举常量 . name();
String name = Weekday.SUNDAY.name();//SUNDAY
//程序员建议使用Enum里面的toString() 方法
格式String 变量名 = 枚举类名 . 枚举常量 . toString();
4):获取枚举的序号(从0开始)相当于获取枚举数组的下标。
格式int 变量名 = 枚举类名 . 枚举常量 . toString();
int ordinal = Weekday.SUNDAY.ordinal();//6
从Java1.5开始出现Enum类型,switch也支持操作枚举类型。
枚举的单例模式:
在Effective Java中文版(第2版) 中,建议枚举来做单例模式,很安全,即使使用反射也不能创建对象。