程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 關於枚舉,java枚舉

關於枚舉,java枚舉

編輯:JAVA綜合教程

關於枚舉,java枚舉


一個簡單的例子:

 

枚舉定義類:

 

 

 

測試類:

 

 

 

關鍵詞:實例,常量

 

枚舉也是一個類。從測試類的第5行知,枚舉變量的聲明與一般對象類的聲明是相同的(Spiciness howHot = ...)。

 

枚舉定義類的第4行:NOT,MILD...,每一串字母都是一個實例,每一個實例都是常量。即:Spiciness這個枚舉類在聲明時與一般聲明相同:Spiciness howHot=...,而等號後面的具體實例只能有五個值:Spiciness.NOT,Spiciness.MILD等等。

 

常量也有自己的方法

 

ordinal():某個enum實例在所有實例中的位置。(比如上例:Spiciness.MEDIUM.ordinal() == 2)。

注意,這裡ordinal()是實例對象調用的。

 

values():靜態方法,按照所有常量在枚舉中的位置,返回所有常量構成的數組:

 

 

 

注意,values()是靜態方法,直接用Spiciness調用。

 

關鍵詞:java.lang.Enum

 

你創建enum時,編譯器會為這個enum生成一個枚舉類,這個類繼承自:java.lang.Enum。

 

編譯器會為這個枚舉類自動加上toString()、hashCode()等方法,所以,在不同的枚舉常量之間,可以用equals、==去比較引用、比較值等:(注意equals與==的區別,equals與hashCode的關系)

 

 

Enum類實現了Comparable接口,所以,枚舉之間可以用compareTo方法比較。

 

像一般類一樣對待enum

 

 

看上面的代碼,除了一些特殊的限制之外,enum也是一個類,它繼承自Enum類,那麼,我們就可以按照操作一般類的方式去操作enum。

 

比如,第13行,加了一個私有構造器(私有構造器使得我們不能從類的外部使用new的方式創建一個實例,但對於枚舉類,即使你在這裡寫一個public,我們也不能從外部創建實例,還是要從內部創建)。

 

第11、17行等,都是像一般類一樣定義變量、方法。

 

而由於WEST、NORTH等本身就是enum內部創建的實例,那麼由於你定義的構造函數中有參數,就要給WEST、NORTH等實例常量後面加上參數(類似於一般類創建實例的方式)。

 

不過這裡有一個限制,在定義方法之前,必須首先定義enum實例,即:5、6、7、8、9行必須寫在前面。

 

關鍵詞:switch

 

枚舉本來就是常量,用在switch中再合適不過,用法也比較簡單,舉例略。

 

關鍵詞:values()

 

前面說過,values()方法是一個靜態方法,但更有趣的是,enum的父類Enum類是沒有這個方法的,values()方法是enum在編譯時,編譯器加上的。

 

既然父類Enum沒有values()方法,那如果把enum類“向上轉型”為Enum類型,就訪問不到values()方法了:

 

 

但是天無絕人之路,你如果真想獲取實例常量數組的話,還是有辦法的。通過反射獲取enum的Class,你會發現,Class正好有個getEnumConstants()可以滿足你的需求:

 

 

 

更多內容請關注微信訂閱號:it_pupil

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved