java枚舉類 (近期讀書筆記整理,復習所用,存個檔
某些情況下,一個類的對象是有限而固定的。
如地球上的季節,有春夏秋冬四季,即四個對象。
這種實例有限且固定的類,被稱為枚舉類。
早期,通過定義類的方式,直接使用簡單的靜態變量來表示枚舉。
如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枚舉類 (近期讀書筆記整理,復習所用,存個檔