Java Enum列舉類學習
列舉類是一個特殊的類,這個類的例項物件是有限的而且是固定的,在定義列舉類的時候就已經生成,不可增加。比如一年四季,只有四個固定的物件。主要區別如下:
1. 列舉類可以實現一個或者多個介面,使用enum定義的列舉類預設繼承java.lang.Enum類,而不是繼承java.lang.Object類,因此只能實現介面不可繼承自其他類。
2. 預設final,無法繼續派生子類
3. 列舉所有例項在程式碼塊中第一行顯式列出,並預設使用public static final修飾。
4. 列舉例項之間使用逗號隔開,列舉之後使用分號結束。之後可定義方法或實現介面方法。
5. 如果編寫構造方法,則預設private許可權,顯式指定也只能指定private。該構造方法僅在執行第一行程式碼生成列舉例項的時候呼叫。
方法:
public static enumtype []values(); 返回一個列舉型別的組合,包含所有例項。 返回SeasonEnum[]
public static enumtype valueOf(string str); 返回制定名稱的列舉例項. SeasonEnum s = SeasonEnum.valueOf("Spring")
列舉類
public enum SeasonEnum {
Spring("Spring"), Summer(Summer), Fall(Fall), Winter(Winter);
private String name;
private SeasonEnum(string str){
name = str;
}
public String print(){ return System.out.println(this.name); }
}
執行:
for(SeasonEnum s : SeasonEnum.values()) { s.print() }
補充方法:
final int ordinal() 返回例項在列舉類中的序號 序號宣告從0開始 比如 SeasonEnum s = SeasonEnum.Spring; int index = s.ordinal(); a等於0;
final int compareTo(). 返回序號的比較結果 s1是春 s2是夏 s1.compareTo(s2) 結果為-1. 當序號較小返回-1,相等0,較大+1;
boolean equals(Object obj) 比較是否相等,用法和compareTo差不多。
public String toString().
public static<T extendsEnum<T>> T valueOf(Class<T> enumtype, String name). 根據指定列舉型別和具體名稱,返回列舉例項。注意這是一個靜態方法。也就是說是通過Enum類呼叫的。舉例:
SeasonEnum s = Enum.valueOf(SeasonEnum.class, "Spring");
注意和之前的valueOf的區別。
進階:
由於Enum列舉類的特性,例項只在一開始構建一次,而且構造方法為private。這個特點可以實現單例模式。比如一個事件模組:
public enum EventModule{
INSTANCE;
...
//在這裡寫其他方法
}