java中enum定义枚举本质是特殊类,表示命名的不可变常量集合;支持属性、私有构造器和方法;提供values()、valueof()等内置方法;可在switch中安全使用。

Java 中用 enum 关键字定义枚举,本质是创建一个特殊的类,用于表示一组**命名的、不可变的常量集合**。它比用 public static final 定义常量更安全、更清晰,还自带方法和属性支持。
基础语法:定义最简枚举
枚举类型必须在类级别声明(不能在方法内),常量名通常全大写,用逗号分隔:
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
这样就定义了一个包含 7 个固定值的枚举类型 Day。每个值(如 MONDAY)是该枚举的一个**实例**,且 JVM 保证全局唯一、不可重复创建。
给枚举添加属性和构造方法
枚举可以像普通类一样有字段、构造器(必须是 private)和方法。常用于为每个常量绑定额外信息:
- 定义私有字段(如中文名称、序号)
- 声明带参私有构造器(在枚举常量后用括号传入)
- 提供公共 getter 方法访问属性
public enum Season {
SPRING("春天", 1),
SUMMER("夏天", 2),
AUTUMN("秋天", 3),
WINTER("冬天", 4);
private final String chineseName;
private final int order;
private Season(String chineseName, int order) {
this.chineseName = chineseName;
this.order = order;
}
public String getChineseName() { return chineseName; }
public int getOrder() { return order; }
}
使用时:Season.SPRING.getChineseName() 返回 "春天";Season.SPRING.ordinal() 返回序号 0(系统默认索引),而 getOrder() 返回你自定义的 1。
常用内置方法与遍历
所有枚举类自动继承自 java.lang.Enum,因此拥有以下实用方法:
-
values():返回该枚举所有常量的数组(按声明顺序),可用于遍历 -
valueOf(String name):根据名称字符串获取对应枚举实例(区分大小写,不存在则抛IllegalArgumentException) -
name():返回常量的声明名(如Season.SPRING.name()→"SPRING") -
toString():默认等同于name(),但可被重写以返回更友好的描述
示例遍历:
for (Season s : Season.values()) {
System.out.println(s + " → " + s.getChineseName());
}
在 switch 中安全使用枚举
Java 7+ 支持直接用枚举做 switch 表达式,编译器能检查是否覆盖全部常量(配合 default 可防遗漏):
public String getWeather(Season season) {
return switch (season) {
case SPRING -> "温暖湿润";
case SUMMER -> "炎热多雨";
case AUTUMN -> "凉爽干燥";
case WINTER -> "寒冷少雪";
};
}
相比用整数或字符串判断,这种方式类型安全、语义明确、不易出错。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











