Java--枚举和注解--枚举

    1. package com.model.enumeration;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/2 14:34
       *
       * 演示枚举的引出
       */
      public class EnumDemo01 {
          public static void main(String[] args) {
              Season spring = new Season("春天", "温暖");
              Season summer = new Season("夏天", "温暖");
              Season autumn = new Season("球天", "温暖");
              Season winter = new Season("冬天", "温暖");
              Season season = new Season("其他", "温暖");
      //        枚举的值的个数是有限个的,但是我们设计的类可以有多个,这样是不符合实际
      //        季节的个数只有三个,我们这里应该不能在出现其他的季节了,
      //        所以我们这里的设计不能使用类来实现了,只能使用枚举来完成
      
      
          }
      }
      
      
      
      class Season{
          private String name;
          private String desc;
      
          @Override
          public String toString() {
              return "Season{" +
                      "name='" + name + '\'' +
                      ", desc='" + desc + '\'' +
                      '}';
          }
      
          public Season() {
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public String getDesc() {
              return desc;
          }
      
          public void setDesc(String desc) {
              this.desc = desc;
          }
      
          public Season(String name, String desc) {
              this.name = name;
              this.desc = desc;
          }
      }
        
  1.  
      1.  
    1.  

       

      package com.model.enumeration;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/2 15:03
       *
       * 演示枚举的使用:枚举的两种实现方式
       */
      public class EnumDemo02 {
          public static void main(String[] args) {
              //枚举的第一钟实现方式
              System.out.println(SeasonEnumOne.SPRING.toString());
              //枚举的第二钟实现方式的使用
              System.out.println(SeasonEnumTwo.SPRING.getName()+"\t"+SeasonEnumTwo.SPRING.getDesc());
          }
      }
      //枚举的实现方式
      //1.自定义的枚举
      class SeasonEnumOne{
          private String name;
          private String desc;
      
      //    自定义枚举的实现过程
      //    1.将构造器私有化,目的是防止直接new创建
      //    2.去掉set方法,防止属性被修改
      //    3.在类的内部创建固定的对象
      //    4.优化,内部创建的类中加入final修饰符
          private SeasonEnumOne(String name, String desc) {
              this.name = name;
              this.desc = desc;
          }
      
          @Override
          public String toString() {
              return "SeasonEnumOne{" +
                      "name='" + name + '\'' +
                      ", desc='" + desc + '\'' +
                      '}';
          }
      
          //定义了四个对象
          public static final SeasonEnumOne SPRING=new SeasonEnumOne("春天", "温暖");
          public static final SeasonEnumOne SUMMER=new SeasonEnumOne("夏天", "温暖");
          public static final SeasonEnumOne AUTUMN=new SeasonEnumOne("秋天", "温暖");
          public static final SeasonEnumOne WINTER=new SeasonEnumOne("冬天", "温暖");
      
      
          public String getDesc() {
              return desc;
          }
      
          public String getName() {
              return name;
          }
      }
      
      //演示枚举的第二种实现方式:使用Enum关键字
      enum SeasonEnumTwo{
          /**
           * 枚举的实现过程:
           * 1.使用关键字enum修饰代替class
           * 2.定义常量要在enum类的最上方:SPRING("春天","温暖")等价于 public static final SeasonEnumOne SPRING=new SeasonEnumOne("春天", "温暖");
           * 3.enum对象之间用 , 进行分割,不能用 ; 进行分割
           * 4.enum常量写在enum的最上方
           * 5.当我们们使用无参构造函数创建枚举常量是,可以省略小括号
           * 6.当我们使用enum关键字创建的枚举类是,默认会继承一个Enum类,而且是一个final类,我们可以通过反编译 SeasonEnumTwo.class
           * 成 SeasonEnumTwo.java 来观察 (实用工具:javap)* *
           * */
          SPRING("春天","温暖"),
          SUMMER("夏天","温暖"),
          AUTUMN("秋天","温暖"),
          WINTER("冬天","温暖"),
          OTHER;//省略小括号
      
          private String name;
          private String desc;
      
          SeasonEnumTwo() {
          }
      
          private SeasonEnumTwo(String name, String desc) {
              this.name = name;
              this.desc = desc;
          }
      
          public String getName() {
              return name;
          }
      
          @Override
          public String toString() {
              return "SeasonEnumTwo{" +
                      "name='" + name + '\'' +
                      ", desc='" + desc + '\'' +
                      '}';
          }
      
          public String getDesc() {
              return desc;
          }
      }

       

  2. 枚举的课堂练习

  3. Enum成员方法:

    1. package com.model.enumeration;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/2 15:19
       *
       * 演示Enum常用方法的使用
       */
      public class EnumDemo03 {
          public static void main(String[] args) {
      
              Person one = Person.ONE;
      //      1.获取枚举常量的名字
              System.out.println(one.name());
      //      2.输出的枚举常量的次序\编号,从0开始编号
              System.out.println(one.ordinal());
      //      3.从反编译可以看出这个方法是隐藏的,返回一个数组,数组中含有所有的枚举对象
              for (Person o:Person.values()){
                  System.out.println(o);
              }
      //      4.查找类中的枚举常量是否有ONE.如果有就返回枚举常量,如果没有就会报错
              Person one1 = Person.valueOf("ONE");
              System.out.println("one1:"+one1);
              System.out.println(one==one1);
      //      5.就是比较两个枚举常量的编号,  return self.ordinal - other.ordinal;  ,用one的编号-two的编号
              Person two = Person.TWO;
              System.out.println(one.compareTo(two)); //-1
      //        6.如果在枚举类没有重写toString()就返回对象名,在子类中重写后输出枚举常量的属性
              System.out.println(one.toString());
      
      
          }
      }
      enum Person{
      //    枚举的成员方法设置get方法,不要设置set方法,因为枚举的数值应该是固定的几种,枚举常量的之固定
      //    枚举常量放在最上面,枚举常量使用构造方法创建的final类型的常量(简写版),使用无参构造函数是可以称略()
      //    默认的构造器为私有化
      //    多个枚举常量以,进行分割
      //    enum修饰的类,会继承了Enum,且别final修饰
      //
          ONE("zzh",20),TWO("a",18),THREE("张紫韩",18),FOUR("b",18);
          private String name;
          private int age;
      
          Person() {
          }
      
          Person(String name, int age) {
              this.name = name;
              this.age = age;
          }
      
          @Override
          public String toString() {
              return "Person{" +
                      "name='" + name + '\'' +
                      ", age=" + age +
                      '}';
          }
      
          public String getName() {
              return name;
          }
      
          public int getAge() {
              return age;
          }
      }

       

  4. Enum课堂练习
    1. package com.model.enumeration;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/2 18:37
       */
      public class EnumDemo04 {
          public static void main(String[] args) {
      
      
              Day[] values = Day.values();  //values()的到所有的枚举常量
              for (Day day:values){
                  System.out.println(day.getName());
              }
      
          }
      }
      enum Day{
          ONE("星期一"),
          TWO("星期二"),
          THREE("星期三"),
          FOUR("星期四"),
          FIVE("星期五"),
          SIX("星期六"),
          SEVEN("星期日");
          private String name;
      
          @Override
          public String toString() {
              return "Day{" +
                      "name='" + name + '\'' +
                      '}';
          }
      
      
          Day(String name) {
              this.name = name;
          }
      
          public String getName() {
              return name;
          }
      }
  5. Enum使用细节:

    1.  
    2.  

      package com.model.enumeration;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/2 20:47
       * 演示Enum使用细节
       */
      public class EnumDemo05 {
          public static void main(String[] args) {
              Music.MUSIC.play();
          }
      }
      interface Play{ //定义接口
          public void play();
      }
      enum Music implements Play{//隐藏的继承了Enum类,并且java时单继承,所以不能在继承类了,但是可以实现接口
          MUSIC;
          @Override  //实现了接口,并且实现接口中的方法
          public void play() {
              System.out.println("播放音乐");
          }
      
      
      }
posted @ 2021-07-02 20:58  张紫韩  阅读(64)  评论(0编辑  收藏  举报