天天看點

黑馬程式員-基礎加強-枚舉

Java 中的枚舉類型采用關鍵字enum 來定義,從jdk1.5才有的新類型,所有的枚舉類型都是繼承自Enum 類型。枚舉類型的定義也非常的簡單,用

enum 關鍵字加上名稱和大括号包含起來的枚舉值體即可,例如上面提到的彩虹顔色就可以用新的 enum 方式來重新定義:

enum RainbowColor { RED, ORANGE, YELLOW, GREEN, CYAN, BLUE, PURPLE }

從上面的定義形式來看,似乎 Java 中的枚舉類型很簡單,但實際上 Java

語言規範賦予枚舉類型的功能非常的強大,它不僅是簡單地将整形數值轉換成對象,而是将枚舉類型定義轉變成一個完整功能的類定義。這種類型定義的擴充允許開發者給枚舉類型增加任何方法和屬性,也可以實作任意的接口。

enum擴大了 switch 語句使用範圍。5.0 之前,Java 中 switch 的值隻能夠是簡單類型,比如 int、long、char,

有了枚舉類型之後,就可以使用對象了。這樣一來,程式的控制選擇就變得更加的友善,看下面的例子:

對于這些枚舉的日期,JVM 都會在運作期構造成出一個簡單的對象執行個體一一對應。這些對象都有唯一的 identity,類似整形數值一樣,switch

語句就根據此來進行執行跳轉。

除了最常見的枚舉定義形式外,如果需要給枚舉類型增加一些複雜功能,也可以通過類似 class 的定義來給枚舉進行定制。比如要給 enum

類型增加屬性、添加構造方法或抽象方法,

不過在使用 Enum 時候有幾個地方需要注意:

enum 類型不支援 public 和 protected 修飾符的構造方法,是以構造函數一定要是private 或 friendly

的。也正因為如此,是以枚舉對象是無法在程式中通過直接調用其構造方法來初始化的。

定義 enum

類型時候,如果是簡單類型,那麼最後一個枚舉值後不用跟任何一個符号;但如果有定制方法,那麼最後一個枚舉值與後面代碼要用分号‘;‘隔開,不能用逗号或空格。

由于 enum 類型的值實際上是通過運作期構造出對象來表示的,是以在cluster

環境下,每個虛拟機都會構造出一個同義的枚舉對象。因而在做比較操作時候就需要注意,如果直接通過使用等号 ( ‘ == ’ )

操作符,這些看似一樣的枚舉值一定不相等,因為這不是同一個對象執行個體。