好的阿杰 👍
我来给你写一份 通俗易懂的 Java 枚举(enum)详解,从概念到实战示例,方便你快速掌握。


🟦 Java 枚举(enum)详解

1️⃣ 什么是枚举?

枚举(enum)是一种特殊的类,用来表示一组固定的常量
比如:季节(春夏秋冬)、星期(周一到周日)、状态码(SUCCESS/FAIL)等。

👉 枚举的好处:

  • 代码更可读:不用写一堆 intString 常量。
  • 更安全:限定只能使用枚举中定义的值。
  • 更强大:枚举可以有构造方法、字段、方法,就像普通类一样。

2️⃣ 枚举的基本语法

enum Season {
    SPRING,
    SUMMER,
    AUTUMN,
    WINTER
}

使用:

public class TestEnum {
    public static void main(String[] args) {
        Season s = Season.SPRING;
        System.out.println(s);  // 输出 SPRING
    }
}


3️⃣ 枚举的常用方法

每个枚举对象都继承自 java.lang.Enum,常见方法有:

Season s = Season.AUTUMN;

System.out.println(s.name());      // AUTUMN(枚举名,字符串)
System.out.println(s.ordinal());   // 2(位置,从0开始)
System.out.println(Season.values());// [SPRING, SUMMER, AUTUMN, WINTER]
System.out.println(Season.valueOf("SUMMER")); // SUMMER


4️⃣ 枚举可以像类一样扩展

枚举不仅仅是常量,还可以定义字段、构造方法、方法

enum Season {
    SPRING("春天", 15),
    SUMMER("夏天", 30),
    AUTUMN("秋天", 20),
    WINTER("冬天", 0);

    private final String name;
    private final int avgTemp;

    // 构造方法(只能是 private)
    Season(String name, int avgTemp) {
        this.name = name;
        this.avgTemp = avgTemp;
    }

    public String getName() {
        return name;
    }

    public int getAvgTemp() {
        return avgTemp;
    }
}

使用:

public class TestEnum {
    public static void main(String[] args) {
        Season s = Season.SUMMER;
        System.out.println(s.getName());     // 夏天
        System.out.println(s.getAvgTemp());  // 30
    }
}


5️⃣ 枚举可以实现接口

枚举不能继承类(因为默认继承 Enum),但可以实现接口

interface Info {
    void show();
}

enum Season implements Info {
    SPRING, SUMMER, AUTUMN, WINTER;

    @Override
    public void show() {
        System.out.println("这是一个季节: " + this.name());
    }
}


6️⃣ 枚举的 switch 用法

枚举在 switch 中非常常见:

Season s = Season.WINTER;
switch (s) {
    case SPRING:
        System.out.println("春暖花开");
        break;
    case SUMMER:
        System.out.println("夏日炎炎");
        break;
    case AUTUMN:
        System.out.println("秋高气爽");
        break;
    case WINTER:
        System.out.println("寒风凛冽");
        break;
}


📝 总结

  • 枚举是特殊类 → 一组常量。
  • 自带方法values()ordinal()name()
  • 可以扩展 → 定义字段、构造方法、实现接口。
  • 实用场景 → 状态码、配置常量、逻辑分支(switch)。