枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示。
基本方法
values():返回enum实例数组。
ordinal():返回声明时的次序,从0开始。
enum必须先定义实例,才能定义方法。
原理性
1.创建实际Enum类时,编译器会为其添加valueOf方法以及values方法。
2.编译器会将Enum标记为final类,所以无法继承Enum
枚举集合
JavaSE5引入了EnumSet,EnumSet元素必须来自Enum
EnumMap要求key必须来自一个Enum
常量相关方法
每个Enum实例可编写方法,如果要实现常量相关方法,则需要为enum定义一个或多个abstract方法,然后每个实例实现此方法。
注意事项
编译器不允许我们将一个enum实例当做class类型,因为每一个enum元素都是一个LikeClass类型的static final实例,所以无法访问外部类非static元素或方法。
实际应用-Enum单例
enum Singleton {
INSTANCE;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "[" + name + "]";
}
}
枚举单例优点:
- 代码简洁
- 枚举自己处理序列化问题,无传统单例的序列化问题,因为因为readObject()方法总是返回一个 新的实例对象
- 线程安全