1、 歷史
? 在 JDK 1.5 之前沒有列舉型別,那時候一般用介面常量來替代(例如,public static final String male ),JKD1.5之后使用 Java 列舉型別 enum 可以更貼近地表示這種常量,
2、列舉的定義
2.1 簡單列舉定義
GenderEnum 性別列舉
/*
性別列舉
*/
public enum GenderEnum {
//定義列舉型別的變數(所有定義的變數都是當前列舉型別的實體名)
//默認所有的定義變數,都是public static final 型別,不需要手動宣告,而且一般都是大寫
MAN,WOMAN
}
測驗
public static void main(String[] args) {
Student student = new Student();
student.setStuNo("S001");
student.setStuName("張三");
//列舉型別賦值,都只能賦值為列舉中已經定義的實體名
student.setGender(GenderEnum.MAN);
student.setGender(GenderEnum.WOMAN);
//非指定列舉型別,都不需要賦值,編譯例外
//student.setGender("男");
student.setStuAge(20);
System.out.println(student);
}
運行結果:

2.2 帶參列舉定義
-
必須宣告內部私有屬性,方便獲取列舉型別實體的引數值
-
必須宣告跟實體物件相符合的內部私有構造方法
-
對外宣告get方法,只允許通過列舉的實體獲取對應引數,不允許setter方法,列舉實體是通過構造方法初始化的
UserStatusEnum 用戶狀態列舉
/*
用戶狀態
*/
public enum UserStatusEnum {
//帶引數列舉型別
STATUS_NORMAL("0","正常"),
STATUS_LOCK("1","鎖定"),
STATUS_OFF("1","注銷");
//必須宣告內部私有屬性,方便獲取列舉型別實體的引數值
private String statusCode;
private String statusMsg;
//必須宣告跟實體物件相符合的內部私有構造方法
private UserStatusEnum(String statusCode,String statusMsg){
this.statusCode = statusCode;
this.statusMsg = statusMsg;
}
//對外宣告get方法,只允許通過列舉的實體獲取對應引數,不允許setter方法,列舉實體是通過構造方法初始化的
public String getStatusCode() {
return statusCode;
}
public String getStatusMsg() {
return statusMsg;
}
//一般,在列舉類中,要提供一個靜態的普通方法,當你不知道列舉的定義,
//只知道狀態碼時,方便獲取對應的說明
public static String getMegsByCode(String statusCode){
//列舉的遍歷
for (UserStatusEnum statusEnum : UserStatusEnum.values()){
//判斷傳入的狀態碼,是否在內部定義中存在
if(statusEnum.statusCode.equals(statusCode)){
return statusEnum.statusMsg;
}
}
//不存在
return null;
}
}
測驗
public class TestUserStatusEnum {
public static void main(String[] args) {
//測驗帶參列舉
//假設當前用戶狀態列舉是鎖定
System.out.println(UserStatusEnum.STATUS_NORMAL.getStatusCode()); //0
System.out.println(UserStatusEnum.STATUS_NORMAL.getStatusMsg()); //正常
//假設當前用戶狀態列舉是注銷
System.out.println(UserStatusEnum.STATUS_OFF.getStatusCode()); //1
System.out.println(UserStatusEnum.STATUS_OFF.getStatusMsg()); //注銷
//測驗列舉提供的普通方法
//假設知道用戶的狀態是0,如何獲取對應的說明
System.out.println(UserStatusEnum.getMegsByCode("0")); //正常
}
}
3、Switch選擇結構支持的型別
| byte |
|---|
| char |
| short |
| int |
| Enum(列舉,JDK1.5增加) |
| String (JDK1.7增加) |
注意:一旦入參是一個列舉型別的實體,所有的case選擇允許值都必須是列舉型別宣告的實體常量;
//驗證switch選擇結構支持的型別:int及以下(int short char byte) 列舉 String
switch(UserStatusEnum.STATUS_NORMAL){ //正常
//一旦入參是一個列舉型別的實體,所有的選擇允許值都必須是列舉型別宣告的實體常量
case STATUS_OFF:
System.out.println("注銷");
break;
case STATUS_LOCK:
System.out.println("鎖定");
break;
case STATUS_NORMAL:
System.out.println("正常");
break;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/492224.html
標籤:Java
