Java 枚舉類

enum關鍵字用於定義枚舉類,若枚舉只有一個成員, 則可以作爲一種單例模式的實現方式。

 
枚舉類對象的屬性不應允許被改動, 所以應該使用 private final 修飾。
枚舉類的使用 private final 修飾的屬性應該在構造器中爲其賦值。
若枚舉類顯式的定義了帶參數的構造器, 則在列出枚舉值時也必須對應的傳入參數。
 
必須在枚舉類的第一行聲明枚舉類對象。
枚舉類和普通類的區別:
       1.使用 enum 定義的枚舉類默認繼承了 java.lang.Enum 類
       2.枚舉類的構造器只能使用 private 訪問控制符
       3.枚舉類的所有實例必須在枚舉類中顯式列出(以,分隔 以; 結尾). 列出的實例系統會自動添加 public static final 修飾
 
JDK1.5之前需要自定義枚舉類:
 
複製代碼
/*枚舉類的自定義方式*/
public class TestSeason {
    public static void main(String[] args){
         Season spring=Season.SPRING;
         System.out.println(spring);
         System.out.println(spring.getSeasonName());
    }
}
//枚舉類
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;
    }
 
    public static final Season SPRING=new Season("spring","春暖花開");
    public static final Season SUMMER=new Season("summer","夏日炎炎");
    public static final Season AUTOMN=new Season("automn","秋高氣爽");
    public static final Season WINTER=new Season("winter","白雪皚皚");
    
    //通過公共的方法來調用屬性
    public String getSeasonName() {
        return seasonName;
    }
    public String getSeasonDesc() {
        return seasonDesc;
    }
    @Override
    public String toString() {
        return "Season [seasonName=" + seasonName + ", seasonDesc="
                + seasonDesc + "]";
    }
}  
複製代碼
JDK 1.5 新增的 enum 關鍵字用於定義枚舉類:
     枚舉類的主要方法:
         1.values()方法:返回枚舉類型的對象數組。該方法可以很方便地遍歷所有的枚舉值。
         2.valueOf(String str):可以把一個字符串轉爲對應的枚舉類對象。要求字符串必須是枚舉類對象的“名字”。如不是,會有運行時異常。
     若需要每個枚舉值在調用實現的接口方法呈現出不同的行爲方式, 則可以讓每個枚舉值分別來實現該方法
複製代碼
/*
 * 一.枚舉類
 * 1.如何自定義枚舉類
 * 2.如何使用enum關鍵字定義枚舉類
 *      常用的方法;values(),valueOf(String str)
 *      如何使枚舉類實現接口:可以讓不同的枚舉類的對象調用被重寫的抽象方法,執行的效果不同(相當於每個對象重寫抽象方法)
 * */

public class TestSeason1{
    public static void main(String[] args){
        SeasonEnum spring=SeasonEnum.SPRING;
        System.out.println(spring);
        System.out.println(spring.getSeasonName());
        
        //1.values方法可以返回枚舉類型的對象數組,可以方便遍歷所有的枚舉值
        SeasonEnum[] seasons=SeasonEnum.values();
        for(int i=0;i<seasons.length;i++){
            System.out.println(seasons[i]);
        }
        //2.valueOf方法可以把一個字符串轉爲對應的枚舉類對象,要求字符串必須是枚舉類對象的“名字”
        String str="WINTER";
        SeasonEnum sea=SeasonEnum.valueOf(str);
        System.out.println(sea);
        //不同的枚舉類對象調用重寫的show方法得到不同的效果
        spring.show();
        sea.show();
        
    }
}
//接口
interface Info{
    public void show();
}
//實現接口的枚舉類
enum SeasonEnum implements Info{
     //必須在枚舉類的第一行聲明枚舉類對象
    SPRING("spring","春暖花開"){
        public void show(){
            System.out.println("春天在哪裏");
        }
    },
    SUMMER("summer","夏日炎炎"){
        public void show(){
            System.out.println("生如夏花");
        }
    },
    AUTOMN("autumn","秋高氣爽"){
        public void show(){
            System.out.println("金色的秋天");
        }
    },
    WINTER("winter","白雪皚皚"){
        public void show(){
            System.out.println("冬天裏的一把火");
        }
    };
    
    private final String seasonName;
    private final String seasonDesc;
    
    private SeasonEnum(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    
    public String getSeasonName() {
        return seasonName;
    }
    
    public String getSeasonDesc() {
        return seasonDesc;
    }
}
發佈了2 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章