1. 程式人生 > >Java Enum列舉類學習

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;

...

//在這裡寫其他方法

 }