在开发过程中,经常遇到一个类的实例对象是有限而且固定的情况。例如季节类,只有春夏秋冬4个实例对象;再比如月分类只有12个实例对象。这种类的实例对象有限而且是固定的,在Java中被称为枚举类。
早期使用简单的静态常量来表示枚举,但存在不安全因素,因此从JDK5开始新增了对枚举类的支持。
定义枚举类使用enum关键字,该关键字的地位与class,interface相同。枚举类是一种特殊的类,与普通类有如下区别:
- 枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了java.lang.Enum类,而不是继承Object类,因此枚举类不能显示继承其他父类。
- 使用enum定义非抽象的枚举类时默认会使用final修饰,因此枚举类不能派生子类。
- 枚举类的构造方法只能使用private访问修饰符,如果省略,则默认使用private修饰;如果强制指定访问修饰符,则只能指定为private。
- 枚举类的所有实例必须在枚举类第一行显式列出,否则该枚举类永远不能产生实例。列出的枚举实例默认使用public static final进行修饰。