天天看點

java特性之Enum枚舉類型

          枚舉類型出現之前,在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;
	}
}
           

結果是:

無參數構造函數
無參數構造函數
無參數構造函數
無參數構造函數
無參數構造函數
星期五有參數構造函數
星期六有參數構造函數