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的抽象方法。在調用的時候,直接調用就可以了。