java的枚舉

java程序中,某些數據的值不能是任意的,只能在一定範圍內取值。要定義這樣的數據類型,就要用到枚舉了。定義枚舉的關鍵字是enum。
看下面的代碼:

enum Grade{
A, B, C, D, E;
}

上面代碼定義了一個五個表示成績的對象。ecum類也像普通類一樣,有普通類一樣的特性,有自己的構造方法,字段等。需要注意的是,在枚舉Grade中,A,B,C,D,E是對象,他們調用的是Grade的jvm默認構造函數。
下面來完善這個枚舉類Grade,給這個枚舉類添加字段和構造方法。讓他的每個對象對應一個分數段。

enum Grade{
    A("100-90"), B("89-80"), C("79-70"), D("69-60"), E("59-50");
    private String value;
    //構造方法聲明爲private
    private Grade(String value){
        this.value = value;
    }
    public String getValue(){
        return this.value;
    }
}

由於枚舉類Grade聲明瞭一個有參構造函數,jvm就不提供默認的構造函數了,所以枚舉對象A,B,C,D,E必須調用這個有參構造函數來構造自己,枚舉的構造方法必須爲private的,避免在創建枚舉類型定義的值範圍以外的對象。每個對象都包含一個字段value,對應每個對象代表的分數段。

帶有抽象方法的枚舉

再看下面的代碼:

enum Grade{
    A("100-90"){
        public String localvalue(){
            return "優"
        }
} ,B("89-80"){
        public String localValue(){
            return "良好"
        }
} , C("79-70"){
        public String localValue(){
            return "良";
        }
} , D("69-60"){
    public String localValue(){
        return "及格";
    }
}, E(59-50"){
    public String localvalue(){
        return "不及格";
    }
};
    private String value;
    private Grade(String value){
        this.value = value;
    }
    public String getValue(){
        return this.value;
    }

    //抽象方法
    public abstract String localValue();

}

在原先代碼中,添加了一個抽象方法,上面也說了枚舉具有有普通類的特性,我們知道,普通類中,有一個抽象方法,那麼這個類必須聲明爲抽象的,並且不能實例化,enum也一樣,不能進行實例化,那麼怎麼構造對象A,B,C,D,E呢?很簡單,只要在構造對象的時候實例化他的抽象方法就可以了。可以看出,上面每個對象在實例化時,都實現了Grade的抽象方法。在調用的時候,直接調用就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章