枚举类
1 package day2_16; 2 3 /** 4 *一、枚举类的使用 5 * 1.类的对象是有限,确定的 6 * 2.需要定义一组常量时 7 * 3.枚举类只有一个对象时,可以作为单例模式的实现方式 8 * 9 *二、如何定义枚举类 10 * jdk5之前自定义枚举类 11 * jdk5之后使用enum关键字定义枚举类 12 * 说明:定义的枚举类默认继承于java.lang.Enum类 13 * 14 *三、Enum类的常用方法 15 * toString():返回当前枚举类对象常量的名称 16 * values():返回枚举类型的对象数组,方便遍历所有的枚举值 17 * valueOf(String objName):返回枚举类中对象名是objName的对象 18 * 如果没有objName的对象,则抛异常:IllegalArgumentException 19 * 20 *四:使用enum关键字定义的枚举类实现接口的情况 21 * 情况一:实现接口,在enum类中实现抽象方法 22 * 情况二:让枚举类中的对象分别实现接口的抽象方法 23 * 24 * 25 * @Author Tianhao 26 * @create 2021-02-16-17:07 27 */ 28 public class SeasonTest { 29 public static void main(String[] args) { 30 Season spring = Season.SPRING; 31 System.out.println(spring);//Season{seasonName='春天', seasonDesc='春暖花开'} 32 33 Season2 autumn = Season2.AUTUMN; 34 //枚举类其父类是java.lang.Enum,它重写了toString()方法,打印的是对象名称 35 System.out.println(autumn);//AUTUMN 36 //查看父类 37 System.out.println(Season2.class.getSuperclass());//class java.lang.Enum 38 39 //values():返回枚举类型的对象数组 40 Season2[] values = Season2.values(); 41 //遍历 42 for (Season2 season : values) { 43 System.out.println(season); 44 season.show(); 45 } 46 47 System.out.println("***************"); 48 //Thread的States属性也是枚举类 49 Thread.State[] states = Thread.State.values(); 50 for (Thread.State state : states) { 51 System.out.println(state); 52 } 53 System.out.println("***************"); 54 55 Season2 summer = Season2.valueOf("SUMMER"); 56 System.out.println(summer);//SUMMER 57 //枚举类没有SUMMER2的对象,则抛异常:IllegalArgumentException 58 // Season2 summer2 = Season2.valueOf("SUMMER2"); 59 // System.out.println(summer2); 60 System.out.println("**************"); 61 summer.show(); 62 63 } 64 } 65 66 interface info { 67 void show(); 68 } 69 70 //自定义枚举类 71 class Season implements info{ 72 //1.声明Season对象的属性 private final修饰 73 private final String seasonName; 74 private final String seasonDesc; 75 76 //2.私有构造器,并给对象属性初始化 77 private Season(String seasonName, String seasonDesc) { 78 this.seasonName = seasonName; 79 this.seasonDesc = seasonDesc; 80 } 81 82 //3.提供当前枚举类的多个对象 83 public static final Season SPRING = new Season("春天", "春暖花开"); 84 public static final Season SUMMER = new Season("夏天", "夏日炎炎"); 85 public static final Season AUTUMN = new Season("秋天", "秋高气爽"); 86 public static final Season WINTER = new Season("冬天", "冰天雪地"); 87 88 //其他诉求1:获取枚举对象的属性 89 public String getSeasonName() { 90 return seasonName; 91 } 92 93 public String getSeasonDesc() { 94 return seasonDesc; 95 } 96 97 //其他诉求2:获取对象全部的属性信息 98 99 @Override 100 public String toString() { 101 return "Season{" + 102 "seasonName='" + seasonName + '\'' + 103 ", seasonDesc='" + seasonDesc + '\'' + 104 '}'; 105 } 106 107 108 @Override 109 public void show() { 110 System.out.println("自定义枚举类的实现接口"); 111 } 112 } 113 114 //使用enum关键字定义枚举类 115 //自定义枚举类 116 enum Season2 implements info{ 117 //1.提供当前枚举类的多个对象,多个对象之间用逗号隔开,最后一个用分号结束 118 //如果实例化的是空参构造器,则直接写对象名称即可 119 //如:SPRING,SUMMER,AUTUMN,WINTER; 120 121 //这是根据每个对象的需求,分别实现抽象方法 122 SPRING("春天", "春暖花开"){ 123 @Override 124 public void show() { 125 System.out.println("春天在哪里"); 126 } 127 }, 128 SUMMER("夏天", "夏日炎炎") { 129 @Override 130 public void show() { 131 System.out.println("宁夏"); 132 } 133 }, 134 AUTUMN("秋天", "秋高气爽") { 135 @Override 136 public void show() { 137 System.out.println("秋意浓"); 138 } 139 }, 140 WINTER("冬天", "冰天雪地") { 141 @Override 142 public void show() { 143 System.out.println("大约在冬季"); 144 } 145 }; 146 147 148 //2.声明Season对象的属性 private final修饰 149 private final String seasonName; 150 private final String seasonDesc; 151 152 //3.私有构造器,并给对象属性初始化 153 private Season2(String seasonName, String seasonDesc) { 154 this.seasonName = seasonName; 155 this.seasonDesc = seasonDesc; 156 } 157 158 159 //其他诉求1:获取枚举对象的属性 160 public String getSeasonName() { 161 return seasonName; 162 } 163 164 public String getSeasonDesc() { 165 return seasonDesc; 166 } 167 168 //这是常规的实现方法,所有枚举对象都会调用这个实现方法 169 // @Override 170 // public void show() { 171 // System.out.println("这是一个enum定义的季节枚举类"); 172 // } 173 174 //其他诉求2:获取对象全部的属性信息 175 //enum定义的枚举类其父类是java.lang.Enum,它重写了toString()方法,打印的是对象名称 176 //也可以根据需要,再重写也是可以的 177 // @Override 178 // public String toString() { 179 // return "Season{" + 180 // "seasonName='" + seasonName + '\'' + 181 // ", seasonDesc='" + seasonDesc + '\'' + 182 // '}'; 183 // } 184 185 }