枚舉
1、理解
枚舉(Enumeration,通常簡寫為enum)在編程語言中是一種特殊的數據類型,它允許你為變量定義一組命名的常量。這些常量通常表示一組有限的值,比如一周的七天、顏色的集合或者狀態的集合等。枚舉類型的主要目的是提高代碼的可讀性和可維護性,同時減少錯誤的可能性。
2、定義
枚舉類型是通過關鍵字
enum
定義的,后面跟著枚舉類型的名稱和用逗號分隔的枚舉值列表。每個枚舉值都是該類型的一個實例,并且每個枚舉值都是唯一的。
3、特點
- 枚舉類型的值是預定義的,并且是有限的。
- 枚舉類型的值是常量,一旦定義后就不能修改。
- 枚舉類型的值具有類型安全性,即它們是強類型的,不能與其他類型混淆。
- 枚舉類型可以定義屬性和方法,就像普通的類一樣,但枚舉類型的構造器通常是私有的,以防止從外部創建枚舉實例。
4、使用
1、案例一季節類
package com.xx.enum02;public class Test01 {/*** 知識點:枚舉的引入* * 需求:編寫季節類(Season),該類只有四個對象(spring,summer,autumn,winter)*/public static void main(String[] args) {System.out.println(Season.spring);System.out.println(Season.summer);System.out.println(Season.autumn);System.out.println(Season.winter);}
}
package com.xx.enum02;//季節枚舉類
//注意:枚舉就是一個受限制的類(該類只能有固定的幾個對象,不能讓外界創建對象)
//注意:枚舉不能有繼承關系(顯示繼承)
//注意:自定義枚舉類隱式繼承Enum類 -- public class Season extends Enum{}
public enum Season{//注意:枚舉類的第一行必須聲明對象//spring;//底層實現 - public static final Season spring = new Season();//spring();//底層實現 - public static final Season spring = new Season();spring("春天","春雨綿綿"),//底層實現 - public static final Season spring = new Season("春天","春雨綿綿");summer("夏天","烈日炎炎"),//底層實現 - public static final Season spring = new Season("夏天","烈日炎炎");autumn("秋天","碩果累 累"),//底層實現 - public static final Season spring = new Season("秋天","碩果累累");winter("冬天","白雪皚皚");//底層實現 - public static final Season spring = new Season("冬天","白雪皚皚");private String name;private String info;//注意:枚舉類的構造方法使用private修飾private Season() {}private Season(String name, String info) {this.name = name;this.info = info;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getInfo() {return info;}public void setInfo(String info) {this.info = info;}@Overridepublic String toString() {return name + " -- " + info;}
}
2、案例二信號機
package com.xx.enum06;//信號燈
public enum Signal {RED, YELLOW, GREEN;
}
package com.xx.enum06;import java.util.Scanner;public class Test01 {/*** 知識點:枚舉案例 之 狀態機*/public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("請選擇信號燈:RED, YELLOW, GREEN");String str = scan.next();Signal signal = Signal.valueOf(str);String trafficInstruct = getTrafficInstruct(signal);System.out.println(trafficInstruct);scan.close();}public static String getTrafficInstruct(Signal signal) {String trafficInstruct = "信號燈故障";switch (signal) {case RED:trafficInstruct = "紅燈停";break;case YELLOW:trafficInstruct = "黃燈請注意";break;case GREEN:trafficInstruct = "綠燈行";break;}return trafficInstruct;}
}
3、案例三錯誤碼
package com.xx.enum07;public enum AddCode {ERR01(-1,"添加失敗 - 學生信息不合法"),ERR02(-2,"添加失敗 - 沒有該學生"),OK(1,"添加成功");private int code;private String message;private AddCode(int code, String message) {this.code = code;this.message = message;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}@Overridepublic String toString() {return code + " -- " + message;}
}
package com.xx.enum07;public class Test01 {/*** 知識點:枚舉案例 之 錯誤碼*/public static void main(String[] args) {System.out.println(AddCode.ERR01);System.out.println(AddCode.ERR02);System.out.println(AddCode.OK);}
}
4、案例四 組織枚舉
package com.qf.enum08;public interface Code {enum AddCode {ERR01(-1,"添加失敗 - 學生信息不合法"),ERR02(-2,"添加失敗 - 有重復學生"),OK(1,"添加成功");private int code;private String message;private AddCode(int code, String message) {this.code = code;this.message = message;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}@Overridepublic String toString() {return code + " -- " + message;}}enum RemoveCode {ERR01(-1,"刪除失敗 - 學生信息不合法"),ERR02(-2,"刪除失敗 - 沒有該學生"),OK(1,"刪除成功");private int code;private String message;private RemoveCode(int code, String message) {this.code = code;this.message = message;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}@Overridepublic String toString() {return code + " -- " + message;}}enum UpdateCode {ERR01(-1,"修改失敗 - 學生信息不合法"),ERR02(-2,"修改失敗 - 沒有該學生"),ERR03(-3,"修改失敗 - 修改數據不合法"),ERR04(-4,"修改失敗 - 目標班級上有學生"),ERR05(-5,"修改失敗 - 目標學號上有學生"),OK(1,"修改成功");private int code;private String message;private UpdateCode(int code, String message) {this.code = code;this.message = message;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}@Overridepublic String toString() {return code + " -- " + message;}}}
package com.qf.enum08;public class Test01 {/*** 知識點:枚舉案例 之 組織枚舉* * 應用場景:可以將一個一個的錯誤碼使用類或接口組織在一起* * 注意:* 使用類組織枚舉,枚舉默認使用static修飾* 使用接口組織枚舉,枚舉默認使用public static修飾* 經驗:使用接口組織眾多枚舉*/public static void main(String[] args) {System.out.println(Code.AddCode.ERR01);}
}