深入淺出講解Java中的枚舉類

背景:類的對象隻有有限個,確定的。舉例如下:
> 星期: Monday (星期一)、….、 Sunday (星期天)

> 性別: Man (男)、 Woman (女)
> 季節: Spring (春節).…….. Winter (冬天)
> 支付方式: Cash (現金)、 WeChatPay (微信)、 Alipay (支付寶) BankCard (銀
行卡)、 CreditCard (信用卡)
> 就職狀態: Busy 、 Free 、 Vocation 、 Dimission
> 訂單狀態: Nonpayment (未付款)、 Paid (已付款)、 Fulfilled (已配貨)、
Delivered (已發貨)、 Return 退貨》 Checked 已確認)

> 線程狀態:創建、就緒、運行、阻塞、死立

一、枚舉類的使用

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

二、如何定義枚舉類

方式一:JDK5.0之前,自定義枚舉類

public class SeasonTest {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        System.out.println(spring);
    }
}
    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;
        }
        //4.其他訴求2:提供toString()
        @Override
        public String toString() {
            return "Season{" +
                    "seasonName='" + seasonName + '\'' +
                    ", seasonDesc='" + seasonDesc + '\'' +
                    '}';
        }
    }

方式二:JDK5.0之後,可以使用enum關鍵字定義枚舉類

public class SeasonTest1 {
    public static void main(String[] args) {
        Season1 summer = Season1.SUMMER;
        System.out.println(summer);
        System.out.println(Season1.class.getSuperclass());//java.lang.Enum
        //values():
        Season1[] values = Season1.values();
        for (int i = 0; i < values.length; i++) {
            System.out.println(values[i]);
        }
        //valueOf(String objName):返回枚舉類中對象時objName的對象。
        Season1 winter = Season1.valueOf("WINTER");
        //如果沒有objName的枚舉類對象,則拋異常:IllegalArgumentException
//        Season1 winter = Season1.valueOf("WINTER1");
        System.out.println(winter);
//        winter.show();
    }
    //使用enum關鍵字定義枚舉類
    enum Season1 {
        //1.提供當前枚舉類的對象,多個對象之間用","隔開,末尾對象";"結束
        SPRING("春天", "春暖花開"),
        SUMMER("夏天", "夏日炎炎"),
        AUTUMN("秋天", "秋高氣爽"),
        WINTER("冬天", "冰天雪地");
        //1.聲明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;
        }

使用enum關鍵字定義的枚舉類實現接口的情況
情況一:實現接口,在enum類中實現抽象方法

情況二:讓枚舉類的對象分別實現接口中的抽象方法

public class SeasonTest1 {
    public static void main(String[] args) {
        //values():
        Season1[] values = Season1.values();
        for (int i = 0; i < values.length; i++) {
            System.out.println(values[i]);
            values[i].show();
        }
    }
    interface Info {
        void show();
    }
    enum Season1 implements Info {
        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("大約在冬季");
            }
        };
        private final String seasonName;
        private final String seasonDesc;
        private Season1(String seasonName, String seasonDesc) {
            this.seasonName = seasonName;
            this.seasonDesc = seasonDesc;
        }
        public String getSeasonName() {
            return seasonName;
        }
        public String getSeasonDesc() {
            return seasonDesc;
        }
}

到此這篇關於深入淺出講解Java中的枚舉類的文章就介紹到這瞭,更多相關Java 枚舉類內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: