Java 枚举怎么用
很多人刚接触Java的时候,总觉得“枚举”是个很“官方”的东西,离自己日常写代码很远——不就是几个固定的选项吗?用个普通的常量类、甚至直接写几个数字判断不也行?但其实,只要你写过需要限定选项的代码,就会发现枚举能帮你少踩很多坑。
先搞懂:什么是Java枚举?
说直白点,枚举就是把你需要的固定选项,提前一一列出来的“专属列表”。举个生活化的例子:你去食堂打饭,窗口只有三种固定的主食:米饭、面条、馒头,你不可能掏出10块钱说“我要个随便的主食”。这个“只有三种固定主食”的规则,放在Java里,就是一个枚举。

普通常量的写法是啥样的?你可能会写:
`java
public static final int RICE = 1;
public static final int NOODLE = 2;
public static final int BUN = 3;
`
但这么写有个大问题:要是有人写了个4,比如int order = 4;,你没法拦他,代码跑起来可能会出bug。但枚举不一样,它会强制规定“只能用我列出来的选项”,一旦有人写了列表外的东西,编译就报错,从根源避免错误。
最基础的用法:直接用枚举存选项
先写个最简单的枚举,对应刚才的食堂主食:
`java
// 定义主食枚举,只有三个固定值
public enum Staple {
RICE, NOODLE, BUN
}
`
用的时候也特别简单,就像用一个新的变量类型:
`java
// 只能用这三个值,不能写别的
Staple myLunch = Staple.RICE;
`
要是有人写成Staple myLunch = Staple.Pizza;,编译器会直接标红——这就是枚举最基础的作用:把固定选项锁死,防止乱取值。
进阶用法:给枚举加“小属性”,满足更多需求
有时候光有个名字不够,比如你还想知道每种主食的价格,总不能单独写个常量对照表吧?这时候可以给枚举加自定义属性。
还是用食堂的例子,给每个主食加价格:
`java
public enum Staple {
// 三个选项,每个都带一个价格属性
RICE(2), NOODLE(3), BUN(1);
// 给枚举加的私有属性,存价格
private final int price;
// 枚举的构造方法,必须和选项的参数对应
Staple(int price) {
this.price = price;
}
// 加个get方法,方便外面拿价格
public int getPrice() {
return price;
}
}
`
用的时候就可以直接拿价格:
`java
// 拿馒头的价格
int bunPrice = Staple.BUN.getPrice(); // 结果是1
`
是不是比单独存常量清晰多了?要是你想加个“是否辣”的属性,也可以接着加,枚举能轻松容纳自定义信息。
实用场景:别再用“魔法值”判断了
很多新手写代码,会用数字判断分支,比如:
`java
int order = 1;
if (order == 1) {
System.out.println("吃米饭");
} else if (order == 2) {
System.out.println("吃面条");
}
`
这里的1、2就是“魔法值”,别人看代码根本不知道1和2对应啥。换成枚举就清楚多了,而且更安全:
`java
Staple order = Staple.NOODLE;
switch (order) {
case RICE:
System.out.println("吃米饭");
break;
case NOODLE:
System.out.println("吃面条");
break;
case BUN:
System.out.println("吃馒头");
break;
}
`
代码一眼就能看懂逻辑,还不会出现“把order写成4”的低级错误。
说白了,Java枚举不是什么复杂的技术,就是帮你把“固定的、有限的选项”管起来的工具——小到做状态判断,大到做配置管理,只要你有“只能从几个选项里挑”的需求,用枚举都能让代码更靠谱、更易懂。