Java 枚举(enum)详细教学

1. 什么是枚举(enum)?

枚举(enum) 是 Java 中一种特殊的类,用于表示一组固定的常量。它使代码更可读、更安全,并避免了魔法值(Magic Numbers)的问题。

枚举的特点:

  1. 固定的取值范围(不能动态添加)。
  2. 默认继承 java.lang.Enum,不能继承其他类(但可以实现接口)。
  3. 每个枚举值都是 public static final 类型的实例
  4. 可以添加构造方法、成员变量、方法
  5. 可以与 switch 语句一起使用

2. 如何定义和使用枚举?

基本枚举

1
2
3
enum Color {
RED, GREEN, BLUE;
}

使用枚举

1
2
3
4
5
6
public class EnumTest {
public static void main(String[] args) {
Color c1 = Color.RED;
System.out.println(c1); // 输出 RED
}
}

3. 枚举的常用方法

常见方法

方法 作用
values() 返回所有枚举值的数组
ordinal() 返回枚举值的索引(从 0 开始)
name() 返回枚举值的字符串名称
valueOf(String name) 通过字符串获取枚举值

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
enum Color {
RED, GREEN, BLUE;
}

public class EnumMethodsTest {
public static void main(String[] args) {
// 获取所有枚举值
for (Color c : Color.values()) {
System.out.println(c + " - 索引: " + c.ordinal());
}

// 通过 name() 获取字符串名称
Color c1 = Color.RED;
System.out.println("名称: " + c1.name());

// 通过 valueOf() 获取枚举值
Color c2 = Color.valueOf("GREEN");
System.out.println("枚举值: " + c2);
}
}

输出:

1
2
3
4
5
RED - 索引: 0
GREEN - 索引: 1
BLUE - 索引: 2
名称: RED
枚举值: GREEN

4. 枚举可以添加构造方法和字段

示例:带属性的枚举

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
enum Color {
RED("红色"), GREEN("绿色"), BLUE("蓝色");

private final String chineseName;

// 构造方法
Color(String chineseName) {
this.chineseName = chineseName;
}

// 获取颜色名称
public String getChineseName() {
return chineseName;
}
}

public class EnumWithFields {
public static void main(String[] args) {
System.out.println(Color.RED + " -> " + Color.RED.getChineseName());
}
}

输出:

1
RED -> 红色

5. 枚举可以实现接口

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
interface Info {
String getInfo();
}

enum Color implements Info {
RED("红色"), GREEN("绿色"), BLUE("蓝色");

private final String chineseName;

Color(String chineseName) {
this.chineseName = chineseName;
}

@Override
public String getInfo() {
return "颜色: " + chineseName;
}
}

public class EnumWithInterface {
public static void main(String[] args) {
System.out.println(Color.BLUE.getInfo());
}
}

输出:

1
颜色: 蓝色

6. 枚举与 switch 语句

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
enum Color {
RED, GREEN, BLUE;
}

public class EnumSwitchTest {
public static void main(String[] args) {
Color color = Color.GREEN;

switch (color) {
case RED:
System.out.println("颜色是红色");
break;
case GREEN:
System.out.println("颜色是绿色");
break;
case BLUE:
System.out.println("颜色是蓝色");
break;
}
}
}

输出:

1
颜色是绿色

7. 枚举可以有抽象方法

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
enum Operation {
ADD {
@Override
public int apply(int a, int b) {
return a + b;
}
},
SUBTRACT {
@Override
public int apply(int a, int b) {
return a - b;
}
};

// 抽象方法,枚举值必须实现它
public abstract int apply(int a, int b);
}

public class EnumWithAbstractMethod {
public static void main(String[] args) {
System.out.println("10 + 5 = " + Operation.ADD.apply(10, 5));
System.out.println("10 - 5 = " + Operation.SUBTRACT.apply(10, 5));
}
}

输出:

1
2
10 + 5 = 15
10 - 5 = 5

8. 枚举与泛型

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
enum Status {
SUCCESS, FAILURE
}

class Response<T> {
private Status status;
private T data;

public Response(Status status, T data) {
this.status = status;
this.data = data;
}

public void print() {
System.out.println("状态: " + status + ", 数据: " + data);
}
}

public class EnumWithGenerics {
public static void main(String[] args) {
Response<String> response = new Response<>(Status.SUCCESS, "操作成功");
response.print();
}
}

输出:

1
状态: SUCCESS, 数据: 操作成功

9. 总结

✔ 枚举的核心要点

枚举用于定义一组固定常量(例如颜色、状态等)。
默认继承 java.lang.Enum,不能继承其他类,但可以实现接口
支持 values()ordinal()name()valueOf() 等方法
可以添加字段、构造方法、普通方法,甚至是抽象方法
支持 switch 语句,提高可读性
可以结合泛型、接口等高级特性使用

🎯 枚举的适用场景

  • 定义 颜色、状态、类型等固定值
  • 结合 switch 进行逻辑控制
  • 替代 int 常量,提高代码可读性和安全性
  • 单例模式(通过枚举实现单例)
  • 策略模式(每个枚举值表示不同的策略)

🔥 枚举让代码更安全、清晰、可读!赶快在你的 Java 代码里使用它吧!🚀