這篇文章運用簡單易懂的例子給大家介紹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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。