一:如何自定义枚举类
类的对象只有有限个、确定的。
当需要定义一族常量时,强烈建议使用枚举类。
案例:
/*** 一:枚举类的使用* 1.类的对象只有有限个、确定的,我们称此为枚举类* 2.如果枚举类当中只有一个对象,则可以作为单例模式的一种实现方式* 二:如何定义枚举类* 1.JDK 5.0之前,自定义枚举类* 2.JDK 5.0之后,可以使用enum关键字定义枚举类*///自定义枚举类class Season{//1.声明Season对象的属性:private final修饰private final String seasonName;private final String seasonDesc;//2.私有化类的构造器,并给对象属性赋值private Season(String seasonName, String seasonDesc) {this.seasonName = seasonName;this.seasonDesc = seasonDesc;}//3.提供当前枚举类的多个(全部)对象:public static final修饰public static final Season SPRING = new Season("春天","春暖花开");public static final Season SUMMER = new Season("夏天","夏日炎炎");public static final Season AUTUMN = new Season("秋天","秋高气爽");public static final Season WINTER = new Season("冬天","冰天雪地");//其他诉求1:获取枚举类对象的属性public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}//其他诉求2:提供toString()方法@Overridepublic String toString() {return "Season{" +"seasonName='" + seasonName + '\'' +", seasonDesc='" + seasonDesc + '\'' +'}';}}//测试public class SeasonTest {public static void main(String[] args) {Season spring = Season.SPRING;System.out.println(spring);}}
二:如何使用关键字enum定义枚举类(重点)
/*** 使用enum关键字定义枚举类* 说明:定义的枚举类默认继承自java.lang.Enum*///在类名前使用enum关键字,声明此类是一个枚举类enum Season1{//1.提供当前枚举类的多个(全部)对象,多个对象之前用“,”隔开,最后一个对象用";"结束。(省略了许多关键字,将提供对象提到了最上面)SPRING("春天","春暖花开"),SUMMER("夏天","夏日炎炎"),AUTUMN("秋天","秋高气爽"),WINTER("冬天","冰天雪地");//1.声明Season1对象的属性:private final修饰private final String seasonName;private final String seasonDesc;//2.私有化类的构造器,并给对象属性赋值private Season1(String seasonName, String seasonDesc) {this.seasonName = seasonName;this.seasonDesc = seasonDesc;}//其他诉求1:获取枚举类对象的属性public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}}//测试public class SeasonTest1 {public static void main(String[] args) {Season1 spring = Season1.SPRING;//演示toString()System.out.println(spring.toString());//输出结果:SPRING//演示values()Season1[] values = Season1.values();for (int i = 0; i < values.length; i++) {System.out.println(values[i]);}//演示valueOf(String objStr)Season1 winter = Season1.valueOf("WINTER");System.out.println(winter);}}
三:Enum类的主要方法(重点)
values():返回枚举类的对象数组。该方法可以很方便地遍历所有的枚举值。valueOf(String objStr):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行异常:lllegalArgumentException.toString():返回当前枚举类对象常量的名称。
四:实现接口的枚举类
/*** 使用enum关键字定义的枚举类实现接口的情况* 情况一:实现接口,在enum类中实现抽象方法。* 情况二:让枚举类的对象分别实现接口中的抽象方法。*///定义接口interface Info{void show();}//定义枚举类enum Season2 implements Info{//情况二:让枚举类的对象分别实现接口中的抽象方法。SPRING("春天","春暖花开"){@Overridepublic void show() {System.out.println("这是春天。");}},SUMMER("夏天","夏日炎炎"){@Overridepublic void show() {System.out.println("这是夏天。");}},AUTUMN("秋天","秋高气爽"){@Overridepublic void show() {System.out.println("这是秋天。");}},WINTER("冬天","冰天雪地"){@Overridepublic void show() {System.out.println("这是冬天。");}};//1.声明Season1对象的属性:private final修饰private final String seasonName;private final String seasonDesc;//2.私有化类的构造器,并给对象属性赋值private Season2(String seasonName, String seasonDesc) {this.seasonName = seasonName;this.seasonDesc = seasonDesc;}//情况一:实现接口中的方法/*@Overridepublic void show() {System.out.println("这是一个季节。");}*/}//测试public class SeasonTest2 {public static void main(String[] args) {Season2 spring = Season2.SPRING;spring.show();}}
