1. 程式人生 > 資訊 >每天一片,善存 R 佳維片多種複合維生素 30 片 * 3 瓶 74 元

每天一片,善存 R 佳維片多種複合維生素 30 片 * 3 瓶 74 元

一、列舉類的使用

  1. 列舉類的理解:類的物件只有有限個,確定的。我們稱此類為列舉類。
  2. 當需要定義一組常量時,強烈建議使用列舉類。
  3. 如果列舉類中只有一個物件,則可以作為單例模式的實現方式。

二、如何定義列舉類

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

//自定義列舉類
class Season {
    //1.宣告Season物件的屬性:private final修飾
    private final String seasonName;
    private final String seasonDesc;

    //2.私有化類的構造器,並給物件屬性賦值
    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("冬天","冰天雪地");

    //4.其他訴求1:獲取列舉類物件的屬性
    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }

    //其他訴求2:提供toString()

    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
}

方式二:jdk5.0,可以使用enum關鍵字定義列舉類(實現程式碼在最下方)

三、Enum類中的常用方法:

  • values():返回列舉型別的物件陣列。該方法可以很方便地遍歷所有的列舉值。
  • valueOf():可以把一個字串轉為
  • toString():返回當前列舉類物件常量的名稱
public class SeasonTest1 {
    public static void main(String[] args) {
        Season1 summer = Season1.SUMMER;
        //toString():
        System.out.println(summer.toString());

        System.out.println("=============================");
        //values():
        Season1[] values = Season1.values();
        for (int i = 0; i < values.length; i++) {
            System.out.println(values[i]);
            values[i].show();
        }

        //valueOf(String objName):返回列舉類中物件名是objName的物件。
        Season1 winter = Season1.valueOf("WINTER");
        //如果沒有objName的列舉類物件,則拋異常:IllegalArgumentException
        //Season1 winter = Season1.valueOf("WINTER1");
        System.out.println(winter);
        winter.show();
    }
}

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

情況一:實現介面,在enum類中實現抽象方法
情況二:讓列舉類的物件分別實現介面中的抽象方法

interface Info{
    void show();
}

//使用enum關鍵字定義列舉類
enum Season1 implements Info {
    //1.提供當前列舉類的物件,多個物件之間用逗號隔開,末尾物件用分號結束。
    SPRING("春天","春暖花開"){
        @Override
        public void show() {
            System.out.println("春天在哪裡?");
        }
    },
    SUMMER("夏天","夏日炎炎"){
        @Override
        public void show() {
            System.out.println("夏天的風");
        }
    },
    AUTUMN("秋天","秋高氣爽"){
        @Override
        public void show() {
            System.out.println("秋天不回來");
        }
    },
    WINTER("冬天","冰天雪地"){
        @Override
        public void show() {
            System.out.println("大約在冬季");
        }
    };

    //2.宣告Season物件的屬性:private final修飾
    private final String seasonName;
    private final String seasonDesc;

    //2.私有化類的構造器,並給物件屬性賦值
    private Season1(String seasonName,String seasonDesc){
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

    //4.其他訴求1:獲取列舉類物件的屬性
    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }
}