枚举类

  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 }

 

posted @ 2021-02-16 21:28  dog_IT  阅读(62)  评论(0编辑  收藏  举报