1. 程式人生 > 其它 >java--列舉和註解--列舉

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. 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;
          }
      }
  1. 列舉的課堂練習

  2. 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;
          }
      }
  3. 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;
          }
      }
  4. Enum使用細節:

    1. 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("播放音樂");
          }
      
      
      }