public static final String MON = "Mon"; public static final String TUE = "Tue"; 高級點: public interface Constants { String MON = "Mon"; String TUE = "Tue"; } 其實徹底能夠這樣寫: public enum Constants { //注意:TUE後面沒有「;」 MON, TUE } 能夠看出enmu能夠優雅地定義常量。
javap Constants,反編譯Constants.class的結果: public final class Constants extends java.lang.Enum<Constants> { public static final Constants MON; public static final Constants TUE; public static Constants[] values(); public static Constants valueOf(java.lang.String); static {}; } 咱們能夠看出它是一個繼承java.lang.Enum類的不可變類,而後它的成員變量是被final static修飾,方法被static修飾。既然枚舉是個特殊的類,固然能夠有構造方法和setter,getter方法,只不過枚舉設計的初心是方便的定義常量,因此就通常只保留getter方法。
//有構造方法和setter、getter方法的枚舉類 public enum EnumTest { private String name; private int code; CURRENT_DAY("星期一",1), //注意;結束 CURRENT_DAY("星期二",2); private EnumTest(String name, int code) { this.name = name; this.code = code; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } }
枚舉除去有構造方法、getter、setter方法也能夠重寫方法(好比:toString()),也能夠在其中定義行的方法,實現接口等,咱們只要將其理解爲特殊的類就行。
html
(1)enum 類型構造函數使用private或者default修飾。因此枚舉對象沒法在程序中經過直接調用其構造方法來初始化。 (2)定義 enum 類型時,簡單類型:最後一個枚舉值後不用跟任何一個符號;有定製方法,最後一個枚舉值與後面代碼要用分號';'隔開。
參考:http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.htmljava