枚举:被final修饰&&继承java.lang.Enum枚举值:被public static final修饰构造函数:被private修饰 特点
单例:
枚举值:被public static final修饰构造方法:被private修饰
线程安全:
枚举值:都是static的,是线程安全的,只会被初始化1次,只会被1个线程初始化1次
反序列化安全:
序列化:java仅将枚举对象的name属性输出到结果中反序列化:通过java.lang.Enum的valueOf方法来根据name查找枚举对象。编译器是不允许对这种序列化机制的定制的,因此禁用了writeObject、readObject、readObjectNoData、writeReplace和readResolve等方法 使用 无自定义属性
public enum Season {
SPRING, SUMMER, AUTUMN, WINTER;
}
反编译
public final class xcrj.Season extends java.lang.Enum方法使用... { public static final xcrj.Season SPRING; descriptor: Lxcrj/Season; flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL, ACC_ENUM public static final xcrj.Season SUMMER; descriptor: Lxcrj/Season; flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL, ACC_ENUM public static final xcrj.Season AUTUMN; descriptor: Lxcrj/Season; flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL, ACC_ENUM public static final xcrj.Season WINTER; descriptor: Lxcrj/Season; flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL, ACC_ENUM ... public static xcrj.Season[] values(); public static xcrj.Season valueOf(java.lang.String);
public static void main(String[] args) {
// 枚举值名称数组
Season[] seasons = Season.values();
// 根据枚举值名称获取枚举
Season season = Season.valueOf("SPRING");
// 获取枚举值的声明顺序
int order = Season.SPRING.ordinal();
// 获取枚举值的名称
String name = Season.SPRING.name();
}
有自定义属性
public enum ErrorCode {
// 成功
SUCCESS("00000", "一切 ok"),
// 一级宏观错误码
USER_ERROR_0001("A0001", "用户端错误");
// 错误码
private final String code;
// 错误描述
private final String description;
ErrorCode(String code, String description) {
this.code = code;
this.description = description;
}
public String getCode() {
return code;
}
public String getDescription() {
return description;
}
}
反编译
public final class xcrj.ErrorCode extends java.lang.Enum... { public static final xcrj.ErrorCode SUCCESS; descriptor: Lxcrj/ErrorCode; flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL, ACC_ENUM public static final xcrj.ErrorCode USER_ERROR_0001; descriptor: Lxcrj/ErrorCode; flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL, ACC_ENUM ... public static xcrj.ErrorCode[] values(); public static xcrj.ErrorCode valueOf(java.lang.String);



