Java基礎-枚舉

java 1.5引入的一個新特性,其本質是一個final修飾的類,繼承自Enum,不可被繼承。

特點

  1. 枚舉類用關鍵字enum修改,本質是類
  2. 定義的枚舉類繼承自java.lang.Enum,且無法被繼承
  3. 私有的構造方法,不能通過new直接創建實例,只能定義出實例
  4. 枚舉類中寫的都是成員變量,被final和static修改,默認的,不用寫
  5. 枚舉類是一種引用類型,引用類型通常用equals()比較,但枚舉類例外,既可以用equals(),也可以使用 ==。這是因為枚舉類型的每一個常量在JVM中只有一個唯一的實例,可以直接用 == 比較。
  6. 可以將enum類型用于switch語句

枚舉類

定義一個枚舉類,如下

public enum Number {
  ONE,TWO,THREE;
}

編譯器編譯處的class類似下面這樣

public class Number{
  public static final Number ONE = new Number();
  public static final Number TWO = new Number();
  public static final Number THREE = new Number();
  private Number(){}
}

默認方法

name()

返回常量名稱,不可重寫。例如:

String str = Number.ONE.name(); // 'ONE'

ordinal()

返回定義的常量的順序,從0開始計數。改變枚舉常量定義的順序會導致ordinal()返回值的變化。例如:

int n = Number.ONE.ordinal(); // 0

toString()

返回常量名稱,可被重寫。例如:

public enum Number {
  ONE,TWO,THREE;
  @Override
  public String toString() {
    return "NONE";
  }
}
// 重寫前
String str = Number.ONE.toString(); // 'ONE'
// 重寫后
String str = Number.ONE.toString(); // 'NONE'

構造方法

枚舉類可以定義私有的構造方法,可以通過定義構造方法來為每個定義實例增加別名。

public enum Number {
    ONE(1),TWO(2),THREE(3); // 枚舉類常量,定義的實例
    public int value; //枚舉類的字段,可final修飾,也可不用
    private Number(int value){
        this.value = value;
    }
    public static void main(String[] args) {
        int num = Number.ONE.value;
        System.out.println("value = " + num);
    }
}
// 輸出:value = 1

switch應用

public static void main(String[] args){
    Number item = Number.ONE;
    switch(item){
      case ONE:
        System.err.println(Number.ONE.value);
        break;
      case TWO:
        System.err.println(Number.TWO.value);
        break;
      case THREE:
        System.err.println(Number.THREE.value);
        break;
      default:
        System.err.println("NONE");
}
// 輸出:value = 1
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容