Java基礎——列舉
阿新 • • 發佈:2020-07-23
列舉
引入
在Java程式中,我們通常通過宣告初始化常量或變數來滿足程式的需求。
但是有些方法在執行時,它需要的資料不能是任意的,必須是一定範圍內的值。
通過列舉,我們把值規定到固定範圍,不用擔心程式碼編寫失誤或超出範圍;
同時,列舉可以在整個程式內呼叫,不用重複編寫,提高程式碼複用率;
此外列舉也能讓程式碼整體更直觀的、可讀性。
列舉的應用場景:錯誤碼,狀態機。
定義
-
不能繼承
- Java規定單繼承,enum已經繼承了
java.lang.Enum
類
- Java規定單繼承,enum已經繼承了
-
可以實現介面
- Java中一個類可以實現多個介面
//許可權修飾符 enum 列舉名 implements 介面名{ // 元素1,元素2...;//分號可有可無 //} public enum Grade{ A,B,C,D,E; }
成員
列舉成員同樣是變數(遵循識別符號規定)
Java 不允許使用 =
為列舉常量賦值
//不能以數字開頭
public enum Num{
1,2,3;
}
//不能用=賦值
public enum Grade{
A = 1,B = 2;
}
本質
除了不能繼承,基本上可以將 enum 看做一個常規的類
Java的enum本質是一個class(類)
- 列舉型別,編譯後就是.class
- 列舉成員是列舉物件,列舉物件均為靜態常量(不可改變)
//第一種寫法 public enum Color{ RED,BLACK,WHITE; } //第二種寫法 public enum Color{ RED(),BLACK(),WHITE(); }
- 列舉可新增構造方法
public enum Color{ RED("red color",0),BLACK("black color",1),WHITE("white color",2); //必須加,enum不能例項化物件 Color(String str,int num){ name = str; id = num; } String name; int id; }
區別
- 列舉不可以例項化
- 自動為構造方法加上private,私有屬性
- 列舉成員變數只有get方法
特點
- 資料集
- 數值穩定
- 元素個數有限
- 所有列舉類繼承Enum類的方法
方法名 引數 返回值 作用 compareTo()
列舉值 int
當前列舉元素在該元素的位置 -
表示左(+)
表示右equals()
object boolean
判斷是否是當前列舉元素 hashcode()
int
獲取列舉值的雜湊碼 ordinal()
int
獲取列舉元素所在位置 name()
String
返回例項名 toString()
String
列舉元素轉為String getClass()
class
獲取當前列舉元素的類 getDeclaringClass())
class
獲取定義列舉的類 - Java 不允許使用
=
為列舉常量賦值。 - 可通過
values()
返回列舉例項陣列 - 可通過
==
比較enum例項