Java枚举类
一、枚举类的使用
1.枚举类的理解:累的对象只有有限个,确定的。我们称此类为枚举类
2.当需要定义一组常量时,强烈建议使用枚举类。
3.如果枚举类中只有一个对象,则可以作为单例模式的实现方式。
二、如何定义枚举类
方式一:jdk5.0之前自定义枚举类
方式二:jdk5.0时可以使用enum关键字定义枚举类
方式一:自定义枚举类:
//自定义枚举类 class Season{ //1.声明Season对象的属性;private 和 final修饰 private final String seasonName; private final String seasonDesc; //2.私有化类的构造器,因为对象是有限个,所以不能是public的 private Season(String seasonName,String seasonDesc){ this.seasonName = seasonName; this.seasonDesc = seasonDesc; } //3.提供枚举类的多个对象(外面不能造对象类,只能在类内部把对象给造好) 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("冬天","冰天雪地"); //5.其他诉求1:获取枚举类对象的属性 public String getSeasonName() { return seasonName; } public String getSeasonDesc() { return seasonDesc; } //提供toString方法 @Override public String toString() { return "Season{" + "seasonName='" + seasonName + '\'' + ", seasonDesc='" + seasonDesc + '\'' + '}'; } }
方式二:使用enum关键字定义枚举类
说明:定义的枚举类默认继承java.lang.Enum类
//enum关键字定义枚举类 enum Season1{ //1.提供当前枚举类的对象,多个对象间用","隔开,末尾使用分号";"结束 SPRING("春天","春暖花开"), SUMMER("夏天","夏日炎炎"), AUTUMN("秋天","秋高气爽"), WINTER("冬天","冰天雪地"); //2.声明Season对象的属性;private 和 final修饰 private final String seasonName; private final String seasonDesc; //3.私有化类的构造器,因为对象是有限个,所以不能是public的 private Season1(String seasonName,String seasonDesc){ this.seasonName = seasonName; this.seasonDesc = seasonDesc; } //4.其他诉求1:获取枚举类对象的属性 public String getSeasonName() { return seasonName; } public String getSeasonDesc() { return seasonDesc; }
三、enum类中的常用方法:
values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值
valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的"名字",如不是,会有运行时异常:
illegalArgumentException
toString():返回当前枚举类对象的常量的名称
public static void main(String[] args) { Season1 summer = Season1.SUMMER; System.out.println(summer.toString()); Season1[] values = Season1.values(); for(Season1 s:values){ System.out.println(s); } Thread.State[] values1 = Thread.State.values(); for (Thread.State state : values1) { System.out.println(state); } //valueOf(String objName)//返回枚举类中对象类是objName的对象 Season1 winter = Season1.valueOf("WINTER"); System.out.println(winter); }
四、使用enum关键字定义枚举类实现接口的情况
1.实现接口,在enum类中实现抽象方法
2.让枚举类的对象分别实现接口中的抽象方法
枚举类的第二种实现接口的方法:
interface Info{ void show(); } //enum关键字定义枚举类 enum Season1 implements Info{ //1.提供当前枚举类的对象,多个对象间用","隔开,末尾使用分号";"结束 SPRING("春天","春暖花开"){ @Override public void show() { System.out.println("春天在哪里"); } }, SUMMER("夏天","夏日炎炎"){ @Override public void show() { System.out.println("夏天悄悄来临"); } }, AUTUMN("秋天","秋高气爽"){ @Override public void show() { System.out.println("秋天不回来"); } }, WINTER("冬天","冰天雪地"){ @Override public void show() { System.out.println("冬天的离别"); } }; //2.声明Season对象的属性;private 和 final修饰 private final String seasonName; private final String seasonDesc; //3.私有化类的构造器,因为对象是有限个,所以不能是public的 private Season1(String seasonName,String seasonDesc){ this.seasonName = seasonName; this.seasonDesc = seasonDesc; } //4.其他诉求1:获取枚举类对象的属性 public String getSeasonName() { return seasonName; } public String getSeasonDesc() { return seasonDesc; }

浙公网安备 33010602011771号