枚举类的使用
1.枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类
2.当需要定义一组常量时,强烈建议使用枚举类
3.如果枚举类中只有一个对象,则可以作为单例模式的实现方式
定义枚举类
方式一
jdk5.0之前,自定义枚举类
public class SeasonTest {public static void main(String[] args) {Season spring = Season.SPRING;System.out.println(spring);}}//自定义枚举类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("冬天","冰树银花" );//4.其他诉求:获取枚举类对象的属性public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}//5.提供toString方法@Overridepublic String toString() {return "Season{" +"seasonName='" + seasonName + '\'' +", seasonDesc='" + seasonDesc + '\'' +'}';}}
方式二
jdk5.0,可以使用enum关键字定义枚举类
说明:定义的枚举类默认继承于java.lang.Enum类
public class SeasonTest1 {public static void main(String[] args) {Season1 summer = Season1.SUMMER;System.out.println(summer);}}//自定义枚举类enum Season1{//1.提供当前枚举类的对象,多个对象之间用”,“隔开,最后一个对象”;“结束SPRING ("春天","春暖花开" ),SUMMER ("夏天","夏日炎炎" ),AUTUMN ("秋天","秋高气爽" ),WINTER ("冬天","冰树银花" );//2.声明Season对象的属性:private final修饰private final String seasonName;private final String seasonDesc;//3.私有化类的构造器,并给对象属性赋值private Season1 (String seasonName,String seasonDesc){this.seasonName = seasonName;this.seasonDesc = seasonDesc;}//4.其他诉求:获取枚举类对象的属性public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}//5.提供toString方法//@Override//public String toString() {//return "Season{" +//"seasonName='" + seasonName + '\'' +//", seasonDesc='" + seasonDesc + '\'' +//'}';//}}
Enum类中常用方法
//toString():System.out.println(summer.toString());//value():Season1[] values = Season1.values();for (int i =0;i < values.length;i++){System.out.println(values[i]);}//valueOf(String objName):返回枚举类中对象名是objName的对象//如果没有objName的枚举类对象,则抛异常:IllegalArgumentExceptionSeason1 winter = Season1.valueOf("WINTER");System.out.println(winter);
enum关键字定义枚举类实现接口情况
①实现接口,在enum类中实现抽象方法
interface Info{void show();}public void show(){System.out.println("这是一个季节");}
②让枚举类的对象分别实现接口中的抽象方法
interface Info{void show();}SPRING ("春天","春暖花开" ){@Overridepublic void show() {}},SUMMER ("夏天","夏日炎炎" ){@Overridepublic void show() {}},AUTUMN ("秋天","秋高气爽" ){@Overridepublic void show() {}},WINTER ("冬天","冰树银花" ){@Overridepublic void show() {}};
