1. 程式人生 > >Java(4)列舉類

Java(4)列舉類

@[TOC] ## 一、列舉類簡介 1. 類的物件**確定且有限**,就成為列舉類。 2. 當需要**定義一組常量**時,使用列舉類。 3. 如果列舉類只有一個物件,則可以作為**單例模式的實現方式**。 ## 二、自定義列舉類 ### 1、方式一:jdk5.0之前,自定義列舉類 1. 程式碼實現 ```java class Season{ //1.屬性要定義為 private final的 private final String seasonName; private final String seasonDesc; //2.構造器私有化(因為屬性是final的,所以要在構造器中初始化) 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("冬天","我是冬天"); } ``` ### 2、方式二:jdk5.0,用enum關鍵字定義列舉類 1. 程式碼實現 ```java enum Season1{ //1.提供列舉類的物件 SPRING("春天","我是春天"), SUMMER("夏天","我是夏天"), AUTUMN("秋天","我是秋天"), WINTER("冬天","我是冬天"); //2.定義屬性,宣告為private final private final String seasonName; private final String seasonDesc; //3.私有化構造器,並給物件賦值 private Season1(String seasonName, String seasonDesc){ this.seasonName = seasonName; this.seasonDesc = seasonDesc; } //4.額外需求:get()方法 public String getSeasonName() { return seasonName; } public String getSeasonDesc() { return seasonDesc; } } ``` 2. 說明 1. 列舉類的物件在第一行宣告,用逗號分隔,分號結尾。不用自己加 `public static final`,因為系統會自動新增。也不用加`new + 構造器`來建立。 2. enum定義的列舉類預設繼承 `java.lang.Enum類`,因此不能再繼承其他類。可以通過 ## 三、Enum類的主要方法 ### 1、toString() 1. 返回當前列舉類物件的名字。 2. 預設輸出物件和呼叫toString是一樣效果 ### 2、values() 1. 靜態方法 2. 返回列舉型別的物件陣列,可以方便的遍歷所有列舉值。 ### 3、valueOf(String str) 1. 靜態方法 2. 把一個字串轉換為對應的列舉類物件。 3. 名字必須一致,否則會出異常: `IllegalArgumentException: No enum constant com.lzx.java.Season1.spring` ## 四、使用enum關鍵字定義的列舉類去實現介面 ### 1、情況一 - 實現介面,在enum類中實現抽象方法即可 ### 2、情況二: - 每個物件分別去實現抽象方法,則不同的物件呼叫各自實現的抽象