枚舉類型ENUM的使用

    JDK 5出現的新特性,新增的enum關鍵字用於定義枚舉類。Java中聲明的枚舉類,均是繼承自Enum。

  爲什麼需要枚舉?

Java的一些方法在運行時,它需要的數據不能是任意的,而必須是一定範圍內的值,此類問題在JDK5以前的程序猿們都採用自定義帶有枚舉功能的類解決,Java5新特性出現後可以直接使用枚舉予以解決。

枚舉類具有以下特性:

① 枚舉類是一種特殊形式的java類;

② 枚舉類中聲明的每一個枚舉值代表枚舉類的一個實例對象;

③ 與java中的普通類一樣,在聲明枚舉類時,也可以聲明屬性、方法和構造函數,但是構造函數必須是私有的。(爲避免還可以使用該方法的構造函數創建其他對象);

④ 枚舉類也可以實現接口或者繼承抽象類;

⑤ JDK 5 中擴展的switch語句,它除了可以接受int、short、byte、char外,還可以接受一個枚舉類型;

⑥ 若枚舉類只有一個枚舉值,則可以當作單態設計模式(內存始終只有一個該類的對象)使用;

自定義帶有枚舉功能的類示例代碼(例如學生成績五個等級):

class Grade{
	private Grade(){}	//Grade方法的構造函數,私有是爲了限制數據不能是任意的
	public static final Grade A=new Grade();
	public static final Grade B=new Grade();
	public static final Grade C=new Grade();
	public static final Grade D=new Grade();
	public static final Grade E=new Grade();	
}
一個枚舉也可以有構造函數、字段和方法。例如每週都有7天,分別爲MON、TUE、 WED、 THU、FRI、SAT、 SUN,我們在使用這種類型的數據時候,也可以使用枚舉。示例代碼:

enum WeekDay {
	A("MON"), B("TUE"), C("WED"), D("THU"), E("FRI"), F("SAT"), G("SUN");
	private String value;<span style="white-space:pre">		</span>//封裝每個對象對應的字段

	private WeekDay(String wd) {
		this.value = wd;
	}

	public String getValue() {
		return this.value;
	}
}
特別注意的是:定義枚舉類的時候構造函數必須要私有。

帶抽象方法的枚舉示例代碼:

enum WeekDay {
	A("MON") {
		public String localValue() {
			return "週一";
		}
	},
	B("TUE") {
		public String localValue() {
			return "週二";
		}
	},
	C("WED") {
		public String localValue() {
			return "週三";
		}
	},
	D("THU") {
		public String localValue() {
			return "週四";
		}
	},
	E("FRI") {
		public String localValue() {
			return "週五";
		}

	},
	F("SAT") {
		public String localValue() {
			return "週六";
		}
	},
	G("SUN") {
		public String localValue() {
			return "週日";
		}
	};
	private String value;

	private WeekDay(String value) {
		this.value = value;
	}

	public String getValue() {
		return this.value;
	}

	public abstract String localValue();
}
注意:在定義枚舉時,定義了抽象方法時,需要在創建每個枚舉對象時候實現該抽象方法;

由於枚舉類繼承自Enum,所以其繼承Enum的所有方法,枚舉類中的常用方法有:

name();返回次枚舉常量的名稱,在其枚舉聲明中對其進行聲明;

ordinal();返回枚舉常量的序數(它在枚舉聲明中的位置,其中初始常量爲0);

valueof(class enumClass,String name);返回帶指定名稱的指定枚舉類型的枚舉常量;

values();用於遍歷枚舉的所有枚舉值。



發佈了39 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章