枚舉類型出現之前,在java的接口或者是類中經常出現public static final修飾的常量,為了讓程式員抛棄這種常量
是以就出現了枚舉文法,同時在一個大項目中,有不同的人協作完成一個任務,在項目中所用到的比如星期,月份,等這樣的會用不同的命名發生沖突,枚舉類型還可以屏蔽枚舉值的類型資訊,完成封裝的要求。枚舉類就是一個類,,可以用類的方法來了解枚舉enum;
第一:枚舉的基本應用:
public class WeekDay
{
public enum WeekDay{
SUN,MON,TUE,WED,THU,FN,SAT
}
/*枚舉類型可以代替java中的public static final,是以的枚舉類型都繼承于枚舉類:
* protected Enum(String name,int ordinal);
*/
public static void main(String []args){
WeekDay today=WeekDay.SAT; //在初始化的時候,應該是WeekDay 的對象初始化;
System.out.println("今天是"+today);
System.out.println("今天是"+today.name());
System.out.println("今天是"+today.toString());
System.out.println("今天是"+today.ordinal()); //傳回此序列的序數
System.out.println("今天是"+WeekDay.valueOf("SAT"));
System.out.println("-------------");
WeekDay[]days=WeekDay.values();
System.out.println("星期中包含"+days.length+"天");
for(WeekDay x:days)
{
System.out.println("星期包含"+x);
}
}
結果是:
今天是SAT
今天是SAT
今天是SAT
今天是6
今天是SAT
今天是SAT
-------------
星期中包含7天
星期包含SUN
星期包含MON
星期包含TUE
星期包含WED
星期包含THU
星期包含FN
星期包含SAT
在使用枚舉的構造函數時,使用enum修飾,其中内的元素大多是常量元素,一般大寫表示,同時在定義枚舉類型的時候,聲明常量時,繼承了Enum類
格式為:Protected Enum(String name,int ordinal)
參數name為枚舉常量的名稱,參數ordinal為枚舉常量的序數;
其中還有好幾個常用的方法:對象.toString():傳回枚舉常量的名稱;對象.屬性(name和ordinal)傳回響應的值,
valueof (class enumType,String name);傳回帶指定名稱的指定枚舉類型的枚舉常量。名稱必須與在此類型中聲明枚舉常量所用的辨別符完全比對。
values()方法傳回該類中的所有枚舉常量;
第二個enum的問題:Enum的本質是類,那麼枚舉的類也有它的構造函數:
構造函數,也是枚舉的構造函數,必須放在枚舉常量的後面,即在聲明了public enum WeekDay{}之後,才能聲明枚舉的構造函數,同時枚舉的構造函數的修飾符必須是private;枚舉類型的自定義的構造函數不能覆寫預設執行的構造函數,隻會在之後執行。
public class EnumTest2 {
public enum WeekDay{
SUN,MON,TUE,WED,THU,FN("星期五"),SAT("星期六");
private WeekDay(){
System.out.println("無參數構造函數");
}
private WeekDay(String s){
System.out.println(s+"有參數構造函數");
}
}
public static void main(String []args){
WeekDay today=WeekDay.SAT;
}
}
結果是:
無參數構造函數
無參數構造函數
無參數構造函數
無參數構造函數
無參數構造函數
星期五有參數構造函數
星期六有參數構造函數