一、概述
枚举是和类以及接口同一个级别的类型,本质就是类(枚举类型编译后也会生成字节码文件)
特殊:枚举是对只有有限对象个数的类的独立(枚举类型中提供对象个数是在定义枚举的时候就已经决定,外面不能添加枚举对象,在外面只能获取枚举对象使用),比如:星期只能有7个对象.
二、使用场景
- 有固定对象的个数比如(一个年有12个月)其对象有12个
- 实现单例模式
三、定义
采用eunm 关键字定义枚举类
public eunm MyEnum{
}
四、常见方法
以下为可直接通过枚举类调用对的方法
以下为枚举对象的方法
返回类型 | 方法名称 | 方法说明 |
---|---|---|
int | compareTo(E o) | 比较此枚举与指定对象的顺序 |
boolean | equals(Object other) | 当指定对象等于此枚举常量时,返回 true。 |
Class | getDeclaringClass() | 返回与此枚举常量的枚举类型相对应的 Class 对象 |
String | name() | 返回此枚举常量的名称,在其枚举声明中对其进行声明 |
int | ordinal() | 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零) |
String | toString() | 返回枚举常量的名称,它包含在声明中 |
static> T | static valueOf(Class enumType, String name) | 返回带指定名称的指定枚举类型的枚举常量。 |
五、特性
- 枚举类默认继承 java.lang.Enum 类,而不是 Object 类,因此枚举类不能显示继承其他父类。
- 使用 enum 定义的非抽象的枚举类默认会使用 final 修饰,因此非抽象枚举类不能派生子类(即不能被继承)。
- 枚举类的构造器只能使用 private 访问控制符,如果忽略访问控制符的话,则默认使用 private 修饰;如果强制指定其他的访问控制符(例如public、procted等),则会报错。
- 枚举类的所有实例必须在枚举类的第一行显示列出,否则这个枚举类永远都不可能产生实例。列出的这些实例,系统会自动给它们加上 public static final 修饰。枚举类的实例以逗号分隔,分号结束,这些列出的枚举值代表了该枚举类的所有可能的实例
六、switch枚举使用
从JDK1.5开始,支持枚举了,然后从JDK1.7开始,也支持String类型
enum Signal {
GREEN, YELLOW, RED
}
public class Test {
Signal color = Signal.RED;
public void change() {
switch (color) {
case RED:
color = Signal.GREEN;
break;
case YELLOW:
color = Signal.RED;
break;
case GREEN:
color = Signal.YELLOW;
break;
}
}
}
在swith中用枚举类型 大大的优化代码的可读性和维护性
七、单例模式枚举
public enum EasySingleton{
INSTANCE;
}
其原因枚举类的每一个对象都是唯一的,所以一个枚举类中只有一个对象的时候就是单例模式。