Java 枚举(enum)详细教学 1. 什么是枚举(enum)? 枚举(enum) 是 Java 中一种特殊的类 ,用于表示一组固定的常量 。它使代码更可读、更安全,并避免了魔法值(Magic Numbers)的问题。
枚举的特点:
固定的取值范围 (不能动态添加)。
默认继承 java.lang.Enum
,不能继承其他类 (但可以实现接口)。
每个枚举值都是 public static final
类型的实例 。
可以添加构造方法、成员变量、方法 。
可以与 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); } }
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()); } Color c1 = Color.RED; System.out.println("名称: " + c1.name()); 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()); } }
输出:
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()); } }
输出:
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 ; } } }
输出:
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 )); } }
输出:
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(); } }
输出:
9. 总结 ✔ 枚举的核心要点 ✅ 枚举用于定义一组固定常量 (例如颜色、状态等)。 ✅ 默认继承 java.lang.Enum
,不能继承其他类,但可以实现接口 。 ✅ 支持 values()
、ordinal()
、name()
、valueOf()
等方法 。 ✅ 可以添加字段、构造方法、普通方法,甚至是抽象方法 。 ✅ 支持 switch
语句,提高可读性 。 ✅ 可以结合泛型、接口等高级特性使用 。
🎯 枚举的适用场景
定义 颜色、状态、类型等固定值
结合 switch
进行逻辑控制
替代 int
常量 ,提高代码可读性和安全性
单例模式 (通过枚举实现单例)
策略模式 (每个枚举值表示不同的策略)
🔥 枚举让代码更安全、清晰、可读!赶快在你的 Java 代码里使用它吧!🚀