枚举类的所有对象都必须放在第一行显示列出,并且枚举类的所有对象默认被 public static final 修饰。
多个对象之间用逗号 “,” 隔开,最后一个对象后面用分号 “;” 结束
枚举类中的对象不需要使用 new 关键字,不需要显式地调用构造方法,它会自动调用构造方法。
使用 enum 定义、非抽象的枚举类默认使用 final 修饰,不可以被继承。
枚举类每个成员变量的值是不能改变的,应该用 private final 修饰。
1.2 枚举类示例
enumSeason{// 默认调用的是无参的构造方法
SPRING,// 等价于:public static final Season SPRING = new Season();
SUMMER,
AUTUMN,
WINTER;privateSeason(){// 构造器需定义为私有的System.out.println("无参构造方法执行");}}
enumSeason{// 默认会调用有参构造方法SPRING("春天"),// 等价于:public static final Season SPRING = new Season("春天");SUMMER("夏天"),AUTUMN("秋天"),WINTER("冬天");privatefinalString name;// 应该用 private final 修饰privateSeason(String name){// 构造器需定义为私有的this.name = name;}publicStringgetName(){return name;}}
publicclassSeasonTest{publicstaticvoidmain(String[] args){System.out.println(Season.SPRING.toString());Season[] values =Season.values();for(Season value : values){System.out.println(value.getName());}System.out.println(Season.valueOf("WINTER1").getName());}}enumSeason{// 默认会调用有参构造方法SPRING("春天"),// 等价于:public static final Season SPRING = new Season("春天");SUMMER("夏天"),AUTUMN("秋天"),WINTER("冬天");privatefinalString name;// 应该用 private final 修饰privateSeason(String name){// 构造器需定义为私有的this.name = name;}publicStringgetName(){return name;}}
注:凡是实现了 Serializable 接口的类都有一个表示序列化版本标识符的常量:private static final long serialVersionUID。serialVersionUID 用来表示类的不同版本之间的兼容性,Java 的序列化机制是通过判断运行时类的 serialVersionUID 来验证版本一致性的。如果类没有显式定义这个常量,那么 Java 序列化机制会根据编译的 Class 自动生成一个 serialVersionUID。如果类的实例变量做过改变,那么 serialVersionUID 可能会发生变化,导致反序列化的失败。即序列化 ID 是为了保证能够成功地进行反序列化
如果 Class 文件没有发生变化,就算编译再多次, serialVersionUID 也不会变化的。