標籤:serial 繼承 span strong 關鍵字 分享 enum san 方法
某些情況下,一個類的對象是有限而固定的。
如地球上的季節,有花牌 (春夏秋冬)四季,即四個對象。
這種執行個體有限且固定的類,被稱為枚舉類。
早期,通過定義類的方式,直接使用簡單的靜態變數來表示枚舉。
如public static final int Season_spring=1; 註:左邊的內容改下名字和X4
但這種方式存在諸多不便和缺陷。(如型別安全和容易混淆,後來,它進化了……
變身:
java5中新增了一個關鍵字,enum(與class,interface的地位相同)
它是一個特殊的類,可以擁有自己的成員變數,方法,可以實現一個或多個介面,也可以定義自己的構造器。
對比一下:
public enum Season{
Spring,Summer,Fall,Winter;
}
是不是很簡潔呢?
但它不是普通類,它和普通類存在區別:
1枚舉類可以實現一個和多個介面,使用enum定義的枚舉類預設繼承了java.lang.Enum類,而不是繼承Object類,因此枚舉類不能顯式繼承其他父類,其中java.lang.Enum類實現了java.lang.Serializable和java.lang.Comparable兩個介面。
2使用Enum定義、非抽象的枚舉類會預設使用final修飾,因此枚舉類不能派生子類。
3枚舉類的構造器只能使用private存取控制符
4枚舉類所有執行個體必須在顯式在第一行列出,否則永遠不能產生執行個體。
枚舉類預設 提供了一個values()方法,該方法可以很方便的遍曆出所有枚舉值。
java.lang.Enum類中所提供的方法
public enum Gender
{
MALE,FEMALE;
//定義一個public修飾的執行個體變數
public String name;
}
public class GenderTest
{
main方法(此處)
//通過Enum的valueof()方法來擷取enum類的枚舉值
Gender g=Enum.valueof(Gender.class,"FEMALE");
g.name="女";
//直接存取枚舉值的name執行個體變數
system.out.println("g"+"代表:"+g.name);
}
}
可以進行一些改進,把String name設成私人屬性,然後添加一個方法,在裡面利用Switch控制實現一個公有的setName方法,避免造成混淆。
暫時就到這裡了,每天進步一點點。學習up
java枚舉類 (近期讀書筆記整理,複習所用,存個檔