java中的列舉

平凡晨發表於2022-03-06

列舉的理解

  • 列舉是一組常量的集合,可以理解:列舉屬於一種特殊的類,裡面包含一組有限的特定物件

列舉定義的兩種方式(自定義列舉和enum關鍵字列舉)

第一種列舉的自定義的實現步驟和注意事項

  • 不要提供Setxxx方法,因為列舉物件值通常為只讀
  • 對列舉物件的屬性使用:public+final+static修飾符
  • 列舉物件名通常使用全部大寫,常量命名規範
  • 列舉物件根據需要,也可以有多個屬性
  • 在本類的內部建立一組本類例項物件
  • 案例
    public class ad {
        public static void main(String[] args) {
            //列印列舉的單個物件例項
            System.out.println(GRY.GREEN);
        }
        
        //自定義列舉
        public static class GRY {
    
            //建立多個列舉物件的例項
            public final static GRY GREEN = new GRY("1","綠燈");
            public final static GRY RED = new GRY("1","紅燈");
            public final static GRY YELLO = new GRY("1","黃燈");
    
            private String type;    //型別
            private String desc;    //描述
    
            //構造器私有化
            private GRY(String type, String desc) {
                this.type = type;
                this.desc = desc;
            }
            
            //只給getxx方法 不要set 方法,因為set方法可以修改
            public String getType() {
                return type;
            }
    
            public String getDesc() {
                return desc;
            }
    
            @Override
            public String toString() {
                return  type + "\n"+ desc ;
            }
        }
    }
    

    Enum關鍵字定義列舉

  • 使用關鍵字enum來替代class
  • 用常量名.(實慘列表)在類內部的第一行來定義
  • 如果有多個常量(物件)中間用,號隔空
  • 如果使用enum來實現列舉,使用,號隔開
  • 舉例
    class Weather {
        public static void main(String[] args) {
            //列印自定義列舉常量
            System.out.println(Season.SPRING);
            System.out.println(Season.WINTER);
            System.out.println(Season.AUTUMN);
            System.out.println(Season.SUMMER);
        }
    
        enum Season {
            //如果使用 enum 來實現列舉,要求將定義常量物件,寫在前面
            // 如果我們使用的是無參構造器,建立常量物件,則可以省略 ()
            SPRING("春天", "溫暖"), WINTER("冬天", "寒冷"), AUTUMN("秋天", "涼爽"),
            SUMMER("夏天", "炎熱");
    
            private String name;
            private String desc;//描述
    
            private Season() {//無參構造器
            }
    
            private Season(String name, String desc) {//有參構造器 並私有化
                this.name = name;
                this.desc = desc;
            }
    
            public String getName() {
                return name;
            }
    
            public String getDesc() {
                return desc;
            }
    
            @Override
            public String toString() {
                return  name + "\t" + desc ;
            }
        }
    }
  • enum關鍵字的注意事項
    • 當enum關鍵字開發一個列舉類時,預設會繼承enum類,這個類是一個final類,不能再被繼承
    • 如果我們使用是無參構造器,則可以直接寫常量名,小括號可以省略
    • 列舉物件必須放在列舉的首行
    • 使用enum關鍵字後,不能使用其他類,因為enum會隱式繼承Enum
    • 列舉型別物件之間的值比較式可以用==,直接比較不用equlas

相關文章