枚舉其實(shí)是個(gè)特殊的 Java 類谴仙,創(chuàng)建枚舉需用enum
關(guān)鍵字屋休,枚舉類都是java.lang.Enum
的子類雷袋,java.lang.Enum
是一個(gè)抽象類持搜,枚舉類型符合通用類型模式Class Enum<E extends Enum<E>>
密似,這里的 E 表示枚舉類型的名稱,枚舉類的每個(gè)值都會(huì)映射到protected Enum(String name, int ordinal)
構(gòu)造函數(shù)中葫盼,每個(gè)值(如NumEnum中的ONE)的名稱都被轉(zhuǎn)成字符串残腌, ordinal 表示被創(chuàng)建的順序(默認(rèn)是0,1,2,3...)。
枚舉類enum
定義如下:
enum NumEnum{
ONE,TWO,THREE,FOUR
}
實(shí)際上是調(diào)用了如下方法:
new Enum<NumEnum>("ONE",0);
new Enum<NumEnum>("TWO",1);
new Enum<NumEnum>("THREE",2);
new Enum<NumEnum>("FOUR",3);
常用方法如下:
//比較此枚舉與指定對(duì)象的順序
int compareTo(E o)
//返回與此枚舉常量的枚舉類型相對(duì)應(yīng)的 Class 對(duì)象
Class<E> getDeclaringClass()
//返回此枚舉常量的名稱
String name()
//返回枚舉常量的序數(shù)(它在枚舉聲明中的位置贫导,其中初始常量序數(shù)為零)
int ordinal()
// 返回枚舉常量的名稱
String toString()
//返回帶指定名稱的指定枚舉類型的枚舉常量
static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
NumEnum
調(diào)用常用方法如下:
System.out.println(NumEnum.ONE.compareTo(NumEnum.FOUR));// -3
System.out.println(NumEnum.ONE.getDeclaringClass());//class com.jeeno.test.NumEnum
System.out.println(NumEnum.TWO.name());//TWO
System.out.println(NumEnum.THREE.ordinal());//2
System.out.println(NumEnum.THREE.toString());//THREE
System.out.println(NumEnum.ONE.valueOf("FOUR"));//FOUR
實(shí)際上enum
就是一個(gè)class
抛猫,只不過(guò) Java 編譯器幫我們做了語(yǔ)法的解析和編譯而已『⒌疲可以把enum
看成是一個(gè)普通的class
闺金,它們都可以定義一些屬性和方法,不同之處是:enum
不能使用extends
關(guān)鍵字繼承其他類峰档,因?yàn)?code>enum已經(jīng)繼承了java.lang.Enum
(java是單一繼承)败匹。