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 }