DK1.5引入了新的類型——枚舉。在 Java 中它雖然算個「小」功能,卻給個人開發帶來了「大」方便。 java
在JDK1.5 以前,咱們定義常量都是: publicstaticfianl.... 。如今好了,有了枚舉,能夠把相關的常量分組到一個枚舉類型裏,並且枚舉提供了比常量更多的方法。 spring
JDK1.6以前的switch語句只支持int,char,enum類型,使用枚舉,能讓咱們的代碼可讀性更強。 ide
若是打算自定義本身的方法,那麼必須在enum實例序列的最後添加一個分號。並且 Java 要求必須先定義 enum 實例。 函數
下面給出一個toString()方法覆蓋的例子。 this
全部的枚舉都繼承自java.lang.Enum類。因爲Java 不支持多繼承,因此枚舉對象不能再繼承其餘類。 spa
java.util.EnumSet和java.util.EnumMap是兩個枚舉集合。EnumSet保證集合中的元素不重複;EnumMap中的 key是enum類型,而value則能夠是任意類型。關於這個兩個集合的使用就不在這裏贅述,能夠參考JDK文檔。 code
關於枚舉的實現細節和原理請參考: 對象
參考資料:《ThinkingInJava》第四版 blog
http://softbeta.iteye.com/blog/1185573 繼承
/** * @Title: TestEnum.java * @Package cn.zh.enumtest */ package cn.zh.enumtest; /*********************************** * @ClassName: TestEnum.java * @Description: 枚舉用法test * @author: zenghang * @createdAt: 2015年11月3日上午9:43:56 ***********************************/ public class TestEnum { /** * ********************************* * @ClassName: TestEnum.java * @Description: 普通枚舉 * @author: zenghang * @createdAt: 2015年11月3日上午9:54:26 ********************************** */ public enum ColorEnum { red,green,yellow,blue; } /** * ********************************* * @ClassName: TestEnum.java * @Description: 枚舉像普通的類同樣能夠添加屬性和方法,能夠爲它添加靜態和非靜態的屬性或方法 * @author: zenghang * @createdAt: 2015年11月3日上午10:04:09 ********************************** */ public enum SeasonEnum { //注:枚舉寫在最前面,不然編譯出錯 spring, summer, autumn, winter; private final static String position = "test"; public static SeasonEnum getSeason() { if("test".equals(position)) { return spring; } else { return winter; } } } /** * ********************************* * @ClassName: TestEnum.java * @Description: 帶有構造器的枚舉 * @author: zenghang * @createdAt: 2015年11月3日上午10:16:28 ********************************** */ public enum Gender { //經過括號賦值,並且必須帶有一個參構造器和一個屬性跟方法,不然編譯出錯 //賦值必須都賦值或都不賦值,不能一部分賦值一部分不賦值;若是不賦值則不能寫構造器,賦值編譯也出錯 MAN("MAN"), WOMEN("WOMEN"); private final String value; //構造器默認也只能是private, 從而保證構造函數只能在內部使用 Gender(String value) { this.value = value; } public String getValue() { return value; } } /** * ********************************* * @ClassName: TestEnum.java * @Description: 實現帶有抽象方法的枚舉 * @author: zenghang * @createdAt: 2015年11月3日上午10:18:53 ********************************** */ public enum OrderState { /** 已取消 */ CANCEL {public String getName(){return "已取消";}}, /** 待審覈 */ WAITCONFIRM {public String getName(){return "待審覈";}}, /** 等待付款 */ WAITPAYMENT {public String getName(){return "等待付款";}}, /** 正在配貨 */ ADMEASUREPRODUCT {public String getName(){return "正在配貨";}}, /** 等待發貨 */ WAITDELIVER {public String getName(){return "等待發貨";}}, /** 已發貨 */ DELIVERED {public String getName(){return "已發貨";}}, /** 已收貨 */ RECEIVED {public String getName(){return "已收貨";}}; public abstract String getName(); } public enum EnumTest { MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6) { @Override public boolean isRest() { return true; } }, SUN(0) { @Override public boolean isRest() { return true; } }; private int value; private EnumTest(int value) { this.value = value; } public int getValue() { return value; } public boolean isRest() { return false; } } public static void main(String []args) { ColorEnum colorEnum = ColorEnum.blue; switch(colorEnum) { case red: System.out.println(ColorEnum.red); break; case green: System.out.println(ColorEnum.green); break; case yellow: System.out.println(ColorEnum.yellow); break; case blue: System.out.println(ColorEnum.blue); break; } //遍歷枚舉 for(ColorEnum color : ColorEnum.values()) { System.out.println(color); } //獲取枚舉的個數 System.out.println("ColorEnum 的個數:" + ColorEnum.values().length); //獲取枚舉的索引位置,默認從0開始 System.out.println(ColorEnum.red.ordinal());//0 System.out.println(ColorEnum.green.ordinal());//1 System.out.println(ColorEnum.yellow.ordinal());//2 System.out.println(ColorEnum.blue.ordinal());//3 //枚舉默認實現了java.lang.Comparable接口 System.out.println(ColorEnum.red.compareTo(ColorEnum.green));//-1 //------------------------- System.out.println("==============="); System.err.println("季節爲" + SeasonEnum.getSeason()); //-------------- System.out.println("==========="); for(Gender gender : Gender.values()){ System.out.println(gender.value); } //-------------- System.out.println("==========="); for(OrderState order : OrderState.values()){ System.out.println(order.getName()); } //---------------- System.out.println("EnumTest.FRI 的 value = " + EnumTest.FRI.getValue()); } }