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

Java 枚舉類型全方位指南

     編輯:Java 綜合教學

Java 枚舉類型全方位指南

enum 是 JDK 1.5 引入的特殊類類型,用於表示固定常量集合。本文系統講解枚舉基本特性、方法添加、switch 使用、values() 來源等核心知識點。

基本特性

  • 枚舉實例即類的 public static final 字段;
  • 默認繼承 java.lang.Enum,不可再繼承其他類;
  • 可實現接口;
  • 建議靜態導入:import static pkg.EnumType.*;

常用方法演示

enum Shrubbery { GROUND, CRAWLING, HANGING }

public class EnumDemo {
    public static void main(String[] args) {
        for (Shrubbery s : Shrubbery.values()) {
            System.out.println(s + " ordinal: " + s.ordinal());
            System.out.println(s.compareTo(Shrubbery.CRAWLING));
            System.out.println(s == Shrubbery.CRAWLING); // 推薦 == 比較
            System.out.println(s.getDeclaringClass());
            System.out.println(s.name());
        }
        // 字符串轉枚舉
        for (String str : "HANGING CRAWLING GROUND".split(" ")) {
            Shrubbery e = Enum.valueOf(Shrubbery.class, str);
            System.out.println(e);
        }
    }
}

向枚舉添加方法與字段

public enum OzWitch {
    WEST("Miss Gulch"), NORTH("Glinda"), EAST("Wicked Witch"), SOUTH("Good");
    private final String description;
    private OzWitch(String desc) { this.description = desc; }
    public String getDescription() { return description; }
    public static void main(String[] args) {
        for (OzWitch w : values()) System.out.println(w + ": " + w.getDescription());
    }
}

注意:實例必須在方法前定義,最後一個實例後需加分號。

覆蓋 Enum 方法

public enum SpaceShip {
    SCOUT, CARGO, TRANSPORT, CRUISER, BATTLESHIP, MOTHERSHIP;
    @Override public String toString() {
        String id = name();
        return id.charAt(0) + id.substring(1).toLowerCase();
    }
}

switch 中使用枚舉

enum Signal { GREEN, YELLOW, RED }
public class TrafficLight {
    Signal color = Signal.RED;
    public void change() {
        switch (color) {
            case RED: color = Signal.GREEN; break;
            case GREEN: color = Signal.YELLOW; break;
            case YELLOW: color = Signal.RED; break;
        }
    }
}

case 標簽直接寫枚舉常量名,無需 前綴類名。

values() 方法來源

values() 是編譯器自動添加的 static 方法,不在 java.lang.Enum 中。可通過反射 Signal.class.getMethods() 查看。

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