Java(4)列舉類

Javalove劉志先發表於2020-11-19

@

一、列舉類簡介

  1. 類的物件確定且有限,就成為列舉類。
  2. 當需要定義一組常量時,使用列舉類。
  3. 如果列舉類只有一個物件,則可以作為單例模式的實現方式

二、自定義列舉類

1、方式一:jdk5.0之前,自定義列舉類

  1. 程式碼實現

    class Season{
        //1.屬性要定義為 private final的
        private final String seasonName;
        private final String seasonDesc;
    
        //2.構造器私有化(因為屬性是final的,所以要在構造器中初始化)
        private Season(String seasonName, String seasonDesc){
            this.seasonName = seasonName;
            this.seasonDesc = seasonDesc;
        }
    
        //3. 提供當前列舉類的幾個物件,並宣告為public static final
        public static final Season SPRING = new Season("春天","我是春天");
        public static final Season SUMMER = new Season("夏天","我是夏天");
        public static final Season AUTUMN = new Season("秋天","我是秋天");
        public static final Season WINTER = new Season("冬天","我是冬天");
    }
    

2、方式二:jdk5.0,用enum關鍵字定義列舉類

  1. 程式碼實現

    enum Season1{
                //1.提供列舉類的物件
                SPRING("春天","我是春天"),
                SUMMER("夏天","我是夏天"),
                AUTUMN("秋天","我是秋天"),
                WINTER("冬天","我是冬天");
    
    
                //2.定義屬性,宣告為private final
                private final String seasonName;
                private final String seasonDesc;
    
                //3.私有化構造器,並給物件賦值
                private Season1(String seasonName, String seasonDesc){
                    this.seasonName = seasonName;
                    this.seasonDesc = seasonDesc;
                }
    
                //4.額外需求:get()方法
    
                public String getSeasonName() {
                    return seasonName;
                }
    
                public String getSeasonDesc() {
                    return seasonDesc;
                }
    }
    
  2. 說明

    1. 列舉類的物件在第一行宣告,用逗號分隔,分號結尾。不用自己加 public static final,因為系統會自動新增。也不用加new + 構造器來建立。
    2. enum定義的列舉類預設繼承 java.lang.Enum類,因此不能再繼承其他類。可以通過

三、Enum類的主要方法

1、toString()

  1. 返回當前列舉類物件的名字。
  2. 預設輸出物件和呼叫toString是一樣效果

2、values()

  1. 靜態方法
  2. 返回列舉型別的物件陣列,可以方便的遍歷所有列舉值。

3、valueOf(String str)

  1. 靜態方法
  2. 把一個字串轉換為對應的列舉類物件。
  3. 名字必須一致,否則會出異常: IllegalArgumentException: No enum constant com.lzx.java.Season1.spring

四、使用enum關鍵字定義的列舉類去實現介面

1、情況一

  • 實現介面,在enum類中實現抽象方法即可

2、情況二:

  • 每個物件分別去實現抽象方法,則不同的物件呼叫各自實現的抽象方法。

相關文章