java列舉類別介紹:(java學習影片推薦:java影片教學)
一、什麼情況下使用枚舉類別?
有的時候一個類別的物件是有限且固定的,這種情況下我們使用枚舉類別就比較方便。
二、為什麼不用靜態常數來取代枚舉類別呢?
public static final int SEASON_SPRING = 1; public static final int SEASON_SUMMER = 2; public static final int SEASON_FALL = 3; public static final int SEASON_WINTER = 4;
枚舉類別更直觀,類型安全。使用常數會有以下幾個缺陷:
1. 類型不安全。若一個方法中要求傳入季節這個參數,用常數的話,形參就是int型,開發者傳入任意型別的int型別值就行,但是如果是列舉型別的話,就只能傳入枚舉類別中包含的對象。
2. 沒有命名空間。開發者要在命名的時候以SEASON_開頭,這樣另外一個開發者再看這段程式碼的時候,才知道這四個常數分別代表季節。
三、列舉類別入門
先看一個簡單的枚舉類別。
package enumcase;public enum SeasonEnum { SPRING,SUMMER,FALL,WINTER; }
enum和class、interface的地位一樣使用enum定義的枚舉類別預設繼承了java.lang.Enum,而不是繼承Object類別。枚舉類別可以實作一個或多個介面。所有枚舉類別的實例都必須放在第一行展示,不需要使用new 關鍵字,不需要明確呼叫建構器。自動加入public static final修飾。使用enum定義、非抽象的枚舉類別預設使用final修飾,不可以被繼承。枚舉類別的建構器只能是私有的。
四、枚舉類別介紹
枚舉類別內也可以定義屬性和方法,可是是靜態的和非靜態的。
package enumcase;public enum SeasonEnum { SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天"); private final String name; private SeasonEnum(String name) { this.name = name; } public String getName() { return name; } }
實際上在第一行寫枚舉類別實例的時候,預設是呼叫了建構器的,所以此處需要傳入參數,因為沒有明確申明無參構造器,只能調用有參數的構造器。
建構器需定義成私有的,這樣就不能在別處申明此類的物件了。枚舉類別通常應該設計成不可變類,它的Field不應該被改變,這樣會更安全,而且程式碼更加簡潔。所以我們將Field用private final修飾。
五、枚舉類別實作介面
枚舉類別可以實作一個或多個介面。與普通類別一樣,實作介面的時候需要實作介面中定義的所有方法,若沒有完全實現,那這個枚舉類別就是抽象的,只是不需要明確加上abstract修飾,系統化會預設加上。
package enumcase; public enum Operation { PLUS{ @Override public double eval(double x, double y) { return x + y; } }, MINUS{ @Override public double eval(double x, double y) { return x - y; } }, TIMES{ @Override public double eval(double x, double y) { return x * y; } }, DIVIDE{ @Override public double eval(double x, double y) { return x / y; } }; /** * 抽象方法,由不同的枚举值提供不同的实现。 * @param x * @param y * @return */ public abstract double eval(double x, double y); public static void main(String[] args) { System.out.println(Operation.PLUS.eval(10, 2)); System.out.println(Operation.MINUS.eval(10, 2)); System.out.println(Operation.TIMES.eval(10, 2)); System.out.println(Operation.DIVIDE.eval(10, 2)); } }
Operatio類別實際上是抽象的,不可以創建枚舉值,所以此處在申明枚舉值的時候,都實現了抽象方法,這其實是匿名內部類別的實現,花括號部分是一個類體。我們可以看下編譯以後的檔案。
共生成了五個class文件,這樣就證明了PLUS,MINUS,TIMES,DIVIDE是Operation的匿名內部類別的實例。
六、switch語句裡的運算式可以是列舉值
Java5新增了enum關鍵字,同時擴充了switch。
package enumcase; public class SeasonTest { public void judge(SeasonEnum s) { switch(s) { case SPRING: System.out.println("春天适合踏青。"); break; case SUMMER: System.out.println("夏天要去游泳啦。"); break; case FALL: System.out.println("秋天一定要去旅游哦。"); break; case WINTER: System.out.println("冬天要是下雪就好啦。"); break; } } public static void main(String[] args) { SeasonEnum s = SeasonEnum.SPRING; SeasonTest test = new SeasonTest(); test.judge(s); } }
case表達式中直接寫入枚舉值,不需加入枚舉類別作為限定。
推薦:java基礎教學
#以上是淺談java枚舉類別(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver CS6
視覺化網頁開發工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中