直接调用枚举类的values()方法可获取所有已定义常量实例,返回按声明顺序排列的枚举类型数组,支持for-each或传统for循环遍历。

直接调用枚举类的 values() 方法即可获取该枚举类中所有已定义的常量实例,返回的是一个该枚举类型的数组,可配合 for-each 循环遍历。
values() 方法的基本用法
values() 是编译器为每个枚举类自动生成的静态方法,无需手动定义。它返回按声明顺序排列的枚举常量数组。
- 方法签名固定为:public static YourEnum[] values()
- 返回数组长度等于枚举中常量个数
- 数组元素顺序与源码中枚举常量的声明顺序完全一致
常见遍历写法示例
以枚举 Day 为例:
enum Day { MON, TUE, WED, THU, FRI, SAT, SUN }
遍历方式如下:
- 增强 for 循环(最常用):
for (Day d : Day.values()) { System.out.println(d); } - 传统 for 循环(需索引时用):
Day[] days = Day.values();<br>for (int i = 0; i < days.length; i++) { System.out.println(days[i]); }
注意事项
- 不能在枚举类内部或外部通过反射等方式覆盖或重写 values() 方法 —— 它是编译器生成的 final 静态方法
- 每次调用
Day.values()都会返回一个新数组(内容相同但引用不同),如需多次使用建议缓存数组引用 - 若枚举常量带有字段或方法,遍历时可直接调用,例如:
d.getDisplayName()
替代方案:valueOf() 与 values() 的区别
values() 用于“获取全部”,而 valueOf(String) 用于“按名称查单个”:
-
Day.valueOf("MON")→ 返回Day.MON(字符串必须完全匹配,否则抛IllegalArgumentException) -
Day.values()→ 返回{MON, TUE, ..., SUN}数组

















