Java关于枚举
一、引言
枚举是Java中一种特殊的类,继承自java.lang.Enum,不能在继承其他类,用于定义固定数量的常量(如星期、季节、状态等)。如果使用int或String常量,容易导致代码难以阅读且不安全(比如误传不在范围内的值,Java 提供了枚举(Enum)来解决这个问题。
二、用法
1.如
enum Weekday {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
注:构造器默认private。
2.
Grade g = Grade.A;
System.out.println(g);
switch (g) {
case A -> System.out.println("优秀");
case B -> System.out.println("良好");
default -> System.out.println("继续努力");
}
三、枚举的高级特性
枚举可以添加字段、构造方法和普通方法,让它变得更强大。
如:
public enum Grade {
A(90, 100, "优秀"),
B(80, 89, "良好"),
C(70, 79, "中等"),
D(60, 69, "及格"),
E(0, 59, "不及格");
private final int min;
private final int max;
private final String desc;
Grade(int min, int max, String desc) {
this.min = min;
this.max = max;
this.desc = desc;
}
public static Grade fromScore(int score) {
for (Grade g : values()) {
if (score >= g.min && score <= g.max) return g;
}
return null;
}
public String getDesc() { return desc; }
}
枚举中的内置方法
每个枚举都隐式继承 java.lang.Enum,拥有以下常用方法:
name():返回枚举常量的名称,如 Grade.A.name() 返回 "A"。
ordinal():返回枚举常量的索引(从0开始)。
values():返回包含所有枚举常量的数组。
valueOf(String):将字符串转换为对应的枚举常量。
四、枚举在switch中的使用
枚举与switch合用,代码清晰且不会漏掉分支。
public void printComment(Grade g) {
switch (g) {
case A -> System.out.println("太棒了!");
case B -> System.out.println("不错哦");
case C -> System.out.println("还可以");
case D -> System.out.println("需要努力");
case E -> System.out.println("不及格");
}
}
注:case 后面直接写枚举常量名,不需要写 Grade.A。
五、常见误区
1.枚举的构造方法是 private 的,只能由JVM在加载时创建固定的实例,所以不能new。
2.因为枚举实例是单例的,== 和 equals 效果相同,但推荐用 == 更高效。

浙公网安备 33010602011771号