java-列舉類
阿新 • • 發佈:2021-11-08
列舉
列舉是一組常量的集合
- 列舉對應英文(enum)
- 列舉屬於一種特殊的類,裡面包含一組有限的特定的物件
列舉的實現方式
- 自定義類實現列舉
- 不需要提供SetXXX方法,因為列舉物件值通常為只讀。
- 對列舉物件/屬性使用final+static共同修飾,實現底層優化。
- 列舉物件名通常使用全部大寫,常量的命名規範
- 列舉物件根據需要 ,也可以有多個屬性
程式碼例項
package com.xxb.enum_; public class Enum01 { public static void main(String[] args) { System.out.println(Season.SPRING); } } //演示定義列舉類實現 class Season{ private String name; private String desc;//描述 public final static Season SPRING=new Season("春天","溫軟"); public final static Season SUMMER=new Season("夏天","炎熱"); //1. 將構造器私有化, 目的防止 直接被new出來 //2. 直接去掉 setXXX相關方法 防止屬性被修改 //3. 在Season內部,直接建立固定的物件 private Season(String name, String desc) { this.name = name; this.desc = desc; } public String getName() { return name; } public String getDesc() { return desc; } @Override public String toString() { return "Season{" + "name='" + name + '\'' + ", desc='" + desc + '\'' + '}'; } }
- 使用enum關鍵字實現列舉
- 使用enum 關鍵字開發一個列舉類時,預設會繼承Enum類
- 如果使用無參構造器建立列舉物件,則實參列表和小括號都可以省略
- 當有多個列舉物件時,使用,(逗號)間隔,最後有一個分號結尾
- 列舉物件必須放在列舉類的行首。
package com.xxb.enum_; public class Enum02 { public static void main(String[] args) { System.out.println(Season2.SPRING); } } //使用enum關鍵字定義列舉類 enum Season2{ //如果使用enum來實現列舉類 //1.使用關鍵字enum替代class //2. 使用下面語句表示列舉 // 3. 若果有多個列舉物件,使用,間隔 //4. 如果使用enum來實現列舉,要求將定義的常量物件,寫在最前面 SPRING("春天","溫暖"),SUMMER("夏天","炎熱"),what; private String name; private final String desc;//描述 private Season2(String name, String desc) { this.name = name; this.desc = desc; } private Season2(){//無參構造器 } public String getName() { return name; } public String getDesc() { return desc; } @Override public String toString() { return "Season2{" + "name='" + name + '\'' + ", desc='" + desc + '\'' + '}'; } }
Enum成員方法
使用關鍵字enum時,會隱式繼承Enum類,這樣我們就可以使用Enum類相關的方法
package com.xxb.enum_; /** * 演示Enum類的各種方法的使用 */ public class EnumMethod { public static void main(String[] args) { Season2 spring = Season2.SPRING; //得到常量名稱 System.out.println(spring.name());//SPRING //ordinal() 輸出的是該列舉物件的次序(第幾個列舉常量 下標值從0 開始) System.out.println(spring.ordinal());//0 //values() 含有定義的所有的列舉物件 Season2[] values = Season2.values(); for(Season2 season: values){ //增強for迴圈 System.out.println(season); } //valueOf 將字串轉換成列舉物件,要求字串必須為已有的常量名,否則報異常 Season2 spring1 = Season2.valueOf("SPRING"); System.out.println("-----"); System.out.println(spring1); //compareTo() 比較常量編號 System.out.println(Season2.SPRING.compareTo(Season2.SUMMER));//0-1=-1 } }