/* 枚举是一种特殊的类,里面只包含一组有限的特定对象枚举的两种实现方式1.自定义类实现枚举2.使用enum关键字实现枚举自定义类实现枚举1.构造器私有化2.本类的内部创建一组对象[]3.对外暴露对象(为对象添加public final static修饰)4.提供get方法,但不用提供set细节1.不需要提供setXxx方法,因为枚举对象值通常为只读2.对枚举对象(属性)使用final + static共同修饰,实现底层优化3.枚举对象名通常全部大写(常量的命名规范)4.枚举对象根据需要,也可以有多个属性enum关键字实现枚举1.使用enum关键字替代class2.常量名(实参列表)public final static Season SPRING = new Season("春天","春暖花开");替换为 SPRING("春天","春暖花开")3.如果有多个常量,用,隔开4.枚举对象必须放在枚举类的首行细节1.当使用enum关键字开发一个枚举时,默认继承Enum类2.如果使用无参构造器创建枚举对象,实参列表和括号可以省略Enum类常用方法使用关键字enum时,会隐式继承Enum类,这时我们就可以使用Enum类相关的方法1.toStringEnum类重写了toString方法,返回当前对象名,子类可以重写toString方法来返回属性信息2.name返回当前对象名(常量名),子类不能重写3.ordinal返回当前对象的位置号,默认从0开始4.values返回当前枚举类中的所有常量5.valueOf将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常6.compareTo比较两个枚举常量的位置号enum实现接口1.使用enum关键字后就不能继承其他类了,因为enum会隐式继承Enum,而Java是单继承机制2.枚举类和普通类一样,可以实现接口enum 类名 implements 接口1,接口2{}*/// 演示自定义类实现枚举 public class Enumeration {public static void main(String[] args) {System.out.println(Season.SPRING);System.out.println(Season.SUMMER);System.out.println(Season.AUTUMN);System.out.println(Season.WINTER);} }class Season{private String name;private String feel;//属性private Season(String name, String feel) {//构造器私有化this.name = name;this.feel = feel;}public String getName() {//get方法return name;}public String getFeel() {return feel;}//定义四个对象public final static Season SPRING = new Season("春天","春暖花开");public final static Season SUMMER = new Season("夏天","烈日炎炎");public final static Season AUTUMN = new Season("秋天","秋高气爽");public final static Season WINTER = new Season("冬天","寒风刺骨");@Override//重写toStringpublic String toString() {return "Season{" +"name='" + name + '\'' +", feel='" + feel + '\'' +'}';} }
// 演示enum关键字实现枚举 public class Enumeration02 {public static void main(String[] args) {System.out.println(Season02.SPRING);System.out.println(Season02.SUMMER);System.out.println(Season02.AUTUMN);System.out.println(Season02.WINTER);} }enum Season02{SPRING("春天","春暖花开"),SUMMER("夏天","烈日炎炎"),AUTUMN("秋天","秋高气爽"),WINTER("冬天","寒风刺骨");private String name;private String feel;//属性Season02(String name, String feel) {//构造器this.name = name;this.feel = feel;}public String getName() {return name;}public String getFeel() {return feel;}@Overridepublic String toString() {return "Season02{" +"name='" + name + '\'' +", feel='" + feel + '\'' +'}';} }// 演示Enum类各种方法的使用 public class Enumeration03 {public static void main(String[] args) {Season03 spring = Season03.SPRING;System.out.println(spring);System.out.println(spring.name());System.out.println(spring.ordinal());Season03[] values = Season03.values();for(Season03 season03 : values){System.out.println(season03);}Season03 value = Season03.valueOf("WINTER");System.out.println(value);System.out.println(spring.compareTo(value));//春天位置号为[0],冬天位置号为[3],0-3=-3} } enum Season03{SPRING("春天","春暖花开"),SUMMER("夏天","烈日炎炎"),AUTUMN("秋天","秋高气爽"),WINTER("冬天","寒风刺骨");private String name;private String feel;//属性Season03(String name, String feel) {//构造器this.name = name;this.feel = feel;}public String getName() {return name;}public String getFeel() {return feel;}@Overridepublic String toString() {return "Season02{" +"name='" + name + '\'' +", feel='" + feel + '\'' +'}';} }
/*下列代码是否正确?表示什么含义?enum Gender{BOY,GIRL;}正确有一个枚举类Gender,没有属性有两个枚举对象BOY,GIRL,使用无参构造器创建*/ // 练习:声明Week枚举类,其中包含星期一到星期日,使用values返回所有数组的枚举数组,并遍历 public class EnumerationExe {public static void main(String[] args) {//获取所有枚举对象Week[] weeks = Week.values();//遍历,使用增强for循环for(Week week : weeks){System.out.println(week);}} } enum Week{MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三"),THURSDAY("星期四"),FRIDAY("星期五"),SATURDAY("星期六"),SUNDAY("星期日");private String name;private Week(String name) {this.name = name;}public String getName() {return name;}@Overridepublic String toString() {return name;} }