您好,登錄后才能下訂單哦!
這篇文章運用簡單易懂的例子給大家介紹java學習中如何使用Enum類型,代碼非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
一、Enum 類型的介紹
枚舉類型(Enumerated Type) 很早就出現在編程語言中,它被用來將一組類似的值包含到一種類型當中。而這種枚舉類型的名稱則會被定義成獨一無二的類型描述符,在這一點上和常量的定義相似。不過相比較常量類型,枚舉類型可以為聲明的變量提供更大的取值范圍。
舉個例子來說明一下,如果希望為彩虹描繪出七種顏色,你可以在 Java 程序中通過常量定義方式來實現。
Public static class RainbowColor { // 紅橙黃綠青藍紫七種顏色的常量定義 public static final int RED = 0; public static final int ORANGE = 1; public static final int YELLOW = 2; public static final int GREEN = 3; public static final int CYAN = 4; public static final int BLUE = 5; public static final int PURPLE = 6; }
使用的時候,你可以在程序中直接引用這些常量。但是,這種方式還是存在著一些問題。
類型不安全
由于顏色常量的對應值是整數形,所以程序執行過程中很有可能給顏色變量傳入一個任意的整數值,導致出現錯誤。
沒有命名空間
由于顏色常量只是類的屬性,當你使用的時候不得不通過類來訪問。
一致性差
因為整形枚舉屬于編譯期常量,所以編譯過程完成后,所有客戶端和服務器端引用的地方,會直接將整數值寫入。這樣,當你修改舊的枚舉整數值后或者增加新的枚舉值后,所有引用地方代碼都需要重新編譯,否則運行時刻就會出現錯誤。
類型無指意性
由于顏色枚舉值僅僅是一些無任何含義的整數值,如果在運行期調試時候,你就會發現日志中有很多魔術數字,但除了程序員本身,其他人很難明白其意義。
二、如何定義 Enum 類型
為了改進 Java 語言在這方面的不足彌補缺陷,5.0 版本 SDK 發布時候,在語言層面上增加了枚舉類型。枚舉類型的定義也非常的簡單,用 enum 關鍵字加上名稱和大括號包含起來的枚舉值體即可,例如上面提到的彩虹顏色就可以用新的 enum 方式來重新定義:
從上面的定義形式來看,似乎 Java 中的枚舉類型很簡單,但實際上 Java 語言規范賦予枚舉類型的功能非常的強大,它不僅是簡單地將整形數值轉換成對象,而是將枚舉類型定義轉變成一個完整功能的類定義。這種類型定義的擴展允許開發者給枚舉類型增加任何方法和屬性,也可以實現任意的接口。另外,Java 平臺也為 Enum 類型提供了高質量的實現,比如默認實現 Comparable 和 Serializable 接口,讓開發者一般情況下不用關心這些細節。
回到本文的主題上來,引入枚舉類型到底能夠給我們開發帶來什么樣好處呢?一個最直接的益處就是擴大 switch 語句使用范圍。5.0 之前,Java 中 switch 的值只能夠是簡單類型,比如 int、byte、short、char, 有了枚舉類型之后,就可以使用對象了。這樣一來,程序的控制選擇就變得更加的方便,看下面的例子:
定義 Enum 類型
// 定義一周七天的枚舉類型 public enum WeekDayEnum { Mon, Tue, Wed, Thu, Fri, Sat, Sun } // 讀取當天的信息 WeekDayEnum today = readToday(); // 根據日期來選擇進行活動 switch(today) { Mon: do something; break; Tue: do something; break; Wed: do something; break; Thu: do something; break; Fri: do something; break; Sat: play sports game; break; Sun: have a rest; break; }
對于這些枚舉的日期,JVM 都會在運行期構造成出一個簡單的對象實例一一對應。這些對象都有唯一的 identity,類似整形數值一樣,switch 語句就根據此來進行執行跳轉。
如何定制 Enum 類型
除了以上這種最常見的枚舉定義形式外,如果需要給枚舉類型增加一些復雜功能,也可以通過類似 class 的定義來給枚舉進行定制。比如要給 enum 類型增加屬性,可以像下面這樣定義:
// 定義 RSS(Really Simple Syndication) 種子的枚舉類型 public enum NewsRSSFeedEnum { // 雅虎頭條新聞 RSS 種子 YAHOO_TOP_STORIES("<a href="http://rss.news.yahoo.com/rss/topstories"><code>http://rss.news.yahoo.com/rss/topstories</code></a>"), //CBS 頭條新聞 RSS 種子 CBS_TOP_STORIES("<a href="http://feeds.cbsnews.com/CBSNewsMain?format=xml"><code>http://feeds.cbsnews.com/CBSNewsMain?format=xml</code></a>"), // 洛杉磯時報頭條新聞 RSS 種子 LATIMES_TOP_STORIES("<a href="http://feeds.latimes.com/latimes/news?format=xml"><code>http://feeds.latimes.com/latimes/news?format=xml</code></a>"); // 枚舉對象的 RSS 地址的屬性 private String rss_url; // 枚舉對象構造函數 private NewsRSSFeedEnum(String rss) { this.rss_url = rss; } // 枚舉對象獲取 RSS 地址的方法 public String getRssURL() { return this.rss_url; } }
上面頭條新聞的枚舉類型增加了一個 RSS 地址的屬性 , 記錄頭條新聞的訪問地址。同時,需要外部傳入 RSS 訪問地址的值,因而需要定義一個構造函數來初始化此屬性。另外,還需要向外提供方法來讀取 RSS 地址。
關于java學習中如何使用Enum類型就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。