1. 程式人生 > 其它 >java-列舉類

java-列舉類

列舉

列舉是一組常量的集合

  • 列舉對應英文(enum)
  • 列舉屬於一種特殊的類,裡面包含一組有限的特定的物件

列舉的實現方式

  1. 自定義類實現列舉
    1. 不需要提供SetXXX方法,因為列舉物件值通常為只讀。
    2. 對列舉物件/屬性使用final+static共同修飾,實現底層優化。
    3. 列舉物件名通常使用全部大寫,常量的命名規範
    4. 列舉物件根據需要 ,也可以有多個屬性

程式碼例項

package com.xxb.enum_;

public class Enum01 {
    public static void main(String[] args) {
        System.out.println(Season.SPRING);
    }
}
//演示定義列舉類實現
class Season{
    private String name;
    private String desc;//描述
    public final static Season SPRING=new Season("春天","溫軟");
    public final static Season SUMMER=new Season("夏天","炎熱");
    //1. 將構造器私有化, 目的防止 直接被new出來
    //2. 直接去掉 setXXX相關方法 防止屬性被修改
    //3. 在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 "Season{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}

  1. 使用enum關鍵字實現列舉
    1. 使用enum 關鍵字開發一個列舉類時,預設會繼承Enum類
    2. 如果使用無參構造器建立列舉物件,則實參列表和小括號都可以省略
    3. 當有多個列舉物件時,使用,(逗號)間隔,最後有一個分號結尾
    4. 列舉物件必須放在列舉類的行首。

package com.xxb.enum_;

public class Enum02 {
    public static void main(String[] args) {
        System.out.println(Season2.SPRING);
    }
}
//使用enum關鍵字定義列舉類
enum Season2{
    //如果使用enum來實現列舉類
    //1.使用關鍵字enum替代class
    //2. 使用下面語句表示列舉
    // 3. 若果有多個列舉物件,使用,間隔
    //4. 如果使用enum來實現列舉,要求將定義的常量物件,寫在最前面
    SPRING("春天","溫暖"),SUMMER("夏天","炎熱"),what;
    private String name;
    private final String desc;//描述


    private Season2(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }
    
    private Season2(){//無參構造器
    
    }

    public String getName() {
        return name;
    }



    public String getDesc() {
        return desc;
    }

    @Override
    public String toString() {
        return "Season2{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}

Enum成員方法

使用關鍵字enum時,會隱式繼承Enum類,這樣我們就可以使用Enum類相關的方法

package com.xxb.enum_;

/**
 * 演示Enum類的各種方法的使用
 */
public class EnumMethod {
    public static void main(String[] args) {
        Season2 spring = Season2.SPRING;
        //得到常量名稱
        System.out.println(spring.name());//SPRING
        //ordinal() 輸出的是該列舉物件的次序(第幾個列舉常量 下標值從0 開始)
        System.out.println(spring.ordinal());//0
        //values() 含有定義的所有的列舉物件
        Season2[] values = Season2.values();
        for(Season2 season: values){
            //增強for迴圈
            System.out.println(season);
        }
        //valueOf 將字串轉換成列舉物件,要求字串必須為已有的常量名,否則報異常
        Season2 spring1 = Season2.valueOf("SPRING");
        System.out.println("-----");
        System.out.println(spring1);
        //compareTo() 比較常量編號
        System.out.println(Season2.SPRING.compareTo(Season2.SUMMER));//0-1=-1

    }
}