1. 程式人生 > 實用技巧 >Java基礎——列舉

Java基礎——列舉

列舉

引入

在Java程式中,我們通常通過宣告初始化常量或變數來滿足程式的需求。

但是有些方法在執行時,它需要的資料不能是任意的,必須是一定範圍內的值

通過列舉,我們把值規定到固定範圍,不用擔心程式碼編寫失誤或超出範圍;
同時,列舉可以在整個程式內呼叫,不用重複編寫,提高程式碼複用率;
此外列舉也能讓程式碼整體更直觀的、可讀性。

列舉的應用場景:錯誤碼,狀態機。

定義

  • 不能繼承

    • Java規定單繼承,enum已經繼承了java.lang.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例項

部落格相關java專案:檢視Github專案

對應github專案:MeiJu

匯入專案的方法: Java基礎——Java如何匯入本地專案