天天看點

一文帶你入門Java的【枚舉類】

文章目錄

    • 一、什麼是枚舉類
    • 二、自定義枚舉類
    • 三、使用enum關鍵字枚舉類
    • 四、枚舉類常用方法
    • 五、讓enum枚舉類對象分别實作接口

一、什麼是枚舉類

枚舉類型用于聲明一組命名的常數,當一個變量隻有幾種已知的取值時,可以将它定義為枚舉類型。

例如:

  • 每星期的星期一到星期日
  • 每月的一月到十二月
  • 四季的春夏秋冬

二、自定義枚舉類

建立步驟

  1. 聲明對象的屬性
  2. 提供私有構造函數
  3. 提供目前枚舉類中的對象
  4. 提供Get方法/重寫toString()
/**
 * 自定義枚舉類
 */
class Week {
    // 1. 聲明Week對象屬性
    private final String weekName;
    private final String color;

    //2. 提供私有構造函數
    private Week(String weekName, String color) {
        this.weekName = weekName;
        this.color = color;
    }

    //3. 提供目前枚舉類中的對象
    public static final Week Monday = new Week("星期一", "黑色");
    public static final Week Tuesday = new Week("星期二", "綠色");
    public static final Week Wednesday = new Week("星期三", "黃色");
    public static final Week Thursday = new Week("星期四", "藍色");
    public static final Week Friday = new Week("星期五", "紅色");
    public static final Week Saturday = new Week("星期六", "青色");
    public static final Week Sunday = new Week("星期日", "白色");

    //4.提供get方法擷取枚舉類的屬性
    public String getWeekName() {
        return weekName;
    }
    public String getColor() {
        return color;
    }
    //5. 重寫toString()
    @Override public String toString() {
        return "Week{weekName='" + weekName + ", color='" + color + "'}";
    }
}
           

三、使用enum關鍵字枚舉類

建立步驟

  1. 提供目前枚舉類對象,多個對象之間用 ‘,’ 隔開,末尾用 ‘;’ 結束
  2. 聲明對象的屬性
  3. 提供構造函數
  4. 提供目前枚舉類中的對象
  5. 提供Get方法/重寫toString()
/**
 * 使用enum關鍵字枚舉類
 */
enum EWeek {
    // 1. 提供目前枚舉類對象,多個對象之間用 ',' 隔開,末尾用 ';' 結束
    Monday("星期一", "黑色"),
    Tuesday("星期二", "綠色"),
    Wednesday("星期三", "黃色"),
    Thursday("星期四", "藍色"),
    Friday("星期五", "紅色"),
    Saturday("星期六", "青色"),
    Sunday("星期日", "白色");

    // 2. 聲明Week對象屬性
    private final String weekName;
    private final String color;

    // 3. 構造函數,給對象指派
    EWeek(String weekName, String color) {
        this.weekName = weekName;
        this.color = color;
    }

    //4.擷取枚舉類的屬性
    public String getWeekName() {
        return weekName;
    }
    public String getColor() {
        return color;
    }
    //5. 重寫toString()
    @Override public String toString() {
        return "Week{weekName='" + weekName + ", color='" + color + "'}";
    }
}
           

四、枚舉類常用方法

  1. toString():輸出對象
  2. values():傳回所的枚舉類對象構成的數組
  3. valueOf(String objName):傳回枚舉類中對象名是objName的對象。
public class EnumDemo {
    public static void main(String[] args) {
        EWeek week = EWeek.Monday;
        //1. 調用toString
        System.out.println("--------------toString()-------------");
        System.out.println(week);
        //2. 傳回所的枚舉類對象構成的數組
        System.out.println("------------values()---------------");
        EWeek[] weeks = EWeek.values();
        System.out.println(Arrays.toString(weeks));
        System.out.println("-------------valueOf(String objName)--------------");
        //3. valueOf(String objName):傳回枚舉類中對象名是objName的對象。
        EWeek week1 = EWeek.valueOf("Monday");
        System.out.println(week1);
        //如果沒objName的枚舉類對象,則抛異常:IllegalArgumentException
        System.out.println("--------------測試無objName對象-------------");
        EWeek week2 = EWeek.valueOf("aaaa");
    }
}
           

輸出結果

一文帶你入門Java的【枚舉類】

五、讓enum枚舉類對象分别實作接口

public class EnumInterfaceDemo {
    public static void main(String[] args) {
        EWeeks eWeeks = EWeeks.Monday;
        eWeeks.show();
    }
}

interface Info{
    void show();
}

/**
 * 使用enum關鍵字枚舉類
 */
enum EWeeks implements Info{
    // 1. 提供目前枚舉類對象,多個對象之間用 ',' 隔開,末尾用 ';' 結束
    Monday("星期一", "黑色"){
        @Override public void show() {
            System.out.println(this.getWeekName() + " 是 " + this.getColor());
        }
    },
    Tuesday("星期二", "綠色"){
        @Override public void show() {
            System.out.println(this.getWeekName() + " 是 " + this.getColor());
        }
    },
    Wednesday("星期三", "黃色"){
        @Override public void show() {
            System.out.println(this.getWeekName() + " 是 " + this.getColor());
        }
    },
    Thursday("星期四", "藍色"){
        @Override public void show() {
            System.out.println(this.getWeekName() + " 是 " + this.getColor());
        }
    },
    Friday("星期五", "紅色"){
        @Override public void show() {
            System.out.println(this.getWeekName() + " 是 " + this.getColor());
        }
    },
    Saturday("星期六", "青色"){
        @Override public void show() {
            System.out.println(this.getWeekName() + " 是 " + this.getColor());
        }
    },
    Sunday("星期日", "白色"){
        @Override public void show() {
            System.out.println(this.getWeekName() + " 是 " + this.getColor());
        }
    };

    // 2. 聲明Week對象屬性
    private final String weekName;
    private final String color;

    // 3. 構造函數,給對象指派
    EWeeks(String weekName, String color) {
        this.weekName = weekName;
        this.color = color;
    }

    //4.擷取枚舉類的屬性
    public String getWeekName() {
        return weekName;
    }
    public String getColor() {
        return color;
    }
    //5. 重寫toString()
    @Override public String toString() {
        return "Week{weekName='" + weekName + ", color='" + color + "'}";
    }
}