一、 枚举类的说明 枚举类的理解:类的对象只有有限个,确定的。 当需要定义一组常量时,强烈建议使用枚举类 如果枚举类只一个对象,则可以作为单例模式的实现方式。
二、如何定义枚举类 ① 自定义枚举类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 class Season { private final String seasonName; private final String seasonDesc; private Season (String seasonName, String seasonDesc) { this.seasonName = seasonName; this.seasonDesc = seasonDesc; } 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("冬天" ,"冰天雪地" ); public String getSeasonName () { return seasonName; } public String getSeasonDesc () { return seasonDesc; } @Override public String toString () { return "Season{" + "seasonName='" + seasonName + '\'' + ", seasonDesc='" + seasonDesc + '\'' + '}' ; } }
1 2 3 4 5 6 public class SeasonTest { public static void main (String[] args) { Season autumn = Season.AUTUMN; System.out.println(autumn); } }
② JDK5.0 新增使用 enum 定义枚举类。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 enum Season1 { SPRING("春天" ,"春暖花开" ), SUMMER("夏天" ,"夏日炎炎" ), AUTUMN("秋天" ,"秋高气爽" ), WINTER("冬天" ,"冰天雪地" ); private final String SeasonName; private final String SeasonDesc; private Season1 (String SeasonName, String SeasonDesc) { this.SeasonName = SeasonName; this.SeasonDesc = SeasonDesc; } public String getSeasonName () { return SeasonName; } public String getSeasonDesc () { return SeasonDesc; } @Override public String toString () { return "Season1{" + "SeasonName='" + SeasonName + '\'' + ", SeasonDesc='" + SeasonDesc + '\'' + '}' ; } }
1 2 3 4 5 6 7 public class SeasonTest2 { public static void main (String[] args) { Season1 season = Season1.AUTUMN; System.out.println(season); } }
③ emum 定义枚举类之后,枚举类常用方法:(继承于 java.lang.Enum 类) value() 返回所有的枚举类对象的构成的数组 valueOf(String objName):返回枚举类中对象名是 objName 的对象。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 interface Info{ void show () ; } enum Season2 implements Info { 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("大约在冬季" ); }; }; private final String SeasonName; private final String SeasonDesc; private Season2 (String SeasonName , String SeasonDesc) { this.SeasonName = SeasonName; this.SeasonDesc = SeasonDesc; } public String getSeasonName () { return SeasonName; } public String getSeasonDesc () { return SeasonDesc; } @Override public String toString () { return "Season2{" + "SeasonName='" + SeasonName + '\'' + ", SeasonDesc='" + SeasonDesc + '\'' + '}' ; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 public class SeasonTest3 { public static void main (String[] args) { Season2 season = Season2.AUTUMN; System.out.println(season.toString()); season.show(); Season2[] values = season.values(); for (int i = 0 ; i <values.length; i++){ System.out.println(values[i]); values[i].show(); } System.out.println("*************************************************" ); Thread.State[] values1 = Thread.State.values(); for (int i = 0 ; i < values1.length; i++){ System.out.println(values1[i]); } System.out.println("***************************************" ); Season2 spring = Season2.valueOf("SPRING" ); System.out.println(spring); }
运行结果:
value()