枚举(Enum)的用法和特性?
请详细解释Java中enum关键字的用法和特性。说明枚举的本质(继承Enum类)、枚举常量、枚举的构造方法、枚举中定义方法和字段,以及EnumMap和EnumSet的使用。
回答
孤独的心
枚举本质:enum是一种特殊的类,继承自java.lang.Enum。枚举常量是public static final的枚举类实例。
基本用法:
public enum Color {
RED(1), GREEN(2), BLUE(3); // 枚举常量
private int code;
Color(int code) { this.code = code; } // 构造方法私有的
public int getCode() { return code; }
}
特性:
- 构造方法必须是private或默认(包级)
- 可以定义字段、方法、抽象方法
- 可以实现接口,但不能继承其他类
- 自动提供values()、valueOf()、ordinal()等方法
- switch语句可直接使用枚举
EnumMap/EnumSet:针对枚举类型优化的高性能集合,内部使用数组实现。
单例模式:枚举是实现单例模式的最佳方式(防止反射和序列化破坏)。