values()是编译器为枚举类自动生成的静态方法,返回按声明顺序排列的所有枚举实例数组,每次调用创建新数组,不可重写,需用EnumType.values()调用,常用于遍历、查找和转换。

Java中枚举类的values()方法是编译器自动生成的静态方法,用于返回该枚举类型所有实例组成的数组,按声明顺序排列。
values() 方法的基本用法
每个枚举类在编译后,JVM会自动为其添加一个名为values()的静态方法,无需手动定义。调用时直接使用枚举类名加点语法即可:
-
Color.values()返回Color[],包含所有Color枚举常量(如RED、GREEN、BLUE) - 返回数组是新创建的,修改它不会影响枚举本身,也不影响后续调用
- 该方法不可重写或覆盖,属于编译器生成的“隐藏”成员
常见使用场景
主要用于遍历、查找或转换枚举实例:
- 遍历所有枚举值:
for (Color c : Color.values()) { ... } - 根据名称查找枚举:
Color.valueOf("RED")(注意:不是values(),但常和它一起用) - 转为列表便于操作:
List<color> list = Arrays.asList(Color.values())</color> - 获取数量:
Color.values().length
注意事项
使用values()时需留意几点:
立即学习“Java免费学习笔记(深入)”;
- 每次调用都返回新数组,不适合高频调用场景(如循环内部),建议缓存结果
- 不能在枚举类内部通过
this.values()调用,必须用EnumType.values() - 泛型枚举或嵌套枚举同样适用,例如
ErrorCode.Status.values() - 反射也能获取,但没必要——
values()就是最直接、安全的方式
不复杂但容易忽略:它不是继承自Enum父类的方法,而是编译期注入的,所以IDE里看不到源码声明,但能正常调用和补全。


















