首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 列舉類型 深度解析:定義、特性、核心方法、Switch 應用與編譯原理

     編輯:Java 相關知識

列舉本質

enum 是 JDK 5.0 引入的特殊參考型別,關鍵字 enum 定義的類別隱含 final,直接繼承 java.lang.Enum,不可被繼承。列舉值為 public static final 常數,即該列舉類別的單例實例。

基本定義與編譯產物

public enum Color { RED, BLUE, BLACK, YELLOW, GREEN }

編譯產生 Color.class,反編譯可見:

  • 每個列舉值為 public static final Color RED; 等靜態常數
  • 私有建構子 Color(String name, int ordinal),外部無法實例化
  • 靜態初始化區塊依序建立實例並賦值給常數
  • 編譯器自動實作 values()、valueOf(String) 等方法

核心特性

  1. 類別本質:可含建構子、方法、欄位、介面實作。
  2. 建構子限制:只能 private,僅在靜態初始化時由編譯器調用,保證實例固定。
  3. 欄位封裝:可為列舉值附加屬性(如 RGB 值)。

帶屬性列舉範例

enum Color {
    RED(255,0,0), BLUE(0,0,255), BLACK(0,0,0), YELLOW(255,255,0), GREEN(0,255,0);
    private int r, g, b;
    private Color(int r, int g, int b) { this.r=r; this.g=g; this.b=b; }
    public String toString() { return super.toString() + "(" + r + "," + g + "," + b + ")"; }
    public int getR() { return r; } // getter...
}

使用:Color c = Color.RED; System.out.println(c); // RED(255,0,0)

繼承自 Enum 的核心方法

方法說明範例
ordinal()宣告順序索引(0-based)Color.RED.ordinal() → 0
compareTo(E o)比較順序差(實作 Comparable)Color.RED.compareTo(Color.BLUE) → -1
values()靜態,回傳所有列舉值陣列for(Color c: Color.values()) ...
toString()回傳列舉常數名稱Color.RED.toString() → "RED"
valueOf(String)靜態,名稱轉列舉值Color.valueOf("BLUE") → Color.BLUE
equals(Object)參考比較(final,不可覆寫)c1 == c2 等價

Switch 陳述式支援

Color c = Color.RED;
switch (c) {
    case RED: System.out.println("紅色"); break;
    case BLUE: System.out.println("藍色"); break;
    // 無需寫 Color.RED,編譯器自動推斷
}

最佳實踐建議

  • 列舉值命名全大寫(常數慣例)。
  • 善用列舉替代 int 常數,獲得型別安全、命名空間、IDE 補全、Switch 完整性檢查。
  • 實作介面讓列舉擁有行為(策略模式)。
  • 序列化自動處理,無需擔心單例破壞。

列舉是 Java 型別系統中表達「固定實例集合」的最佳工具,善用之可大幅提升代碼清晰度與安全性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved