public enum EnumName {
CONSTANT1,
CONSTANT2,
// ... 更多常量
}EnumName:枚举类型名称,首字母大写(符合类命名规范)
CONSTANT1, CONSTANT2, ...:枚举常量,全部大写,多单词用下划线分隔(如 HTTP_OK)
public enum DayOfWeek {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}迭代所有枚举值:调用
DayOfWeek.values()返回一个包含所有枚举常量的数组。
实际开发中,枚举常需携带额外信息(如编码、描述等),可通过构造器和字段实现:
public enum WeekDayEnum {
MONDAY(1, "星期一"),
TUESDAY(2, "星期二"),
WEDNESDAY(3, "星期三"),
THURSDAY(4, "星期四"),
FRIDAY(5, "星期五"),
SATURDAY(6, "星期六"),
SUNDAY(0, "星期日");
private final int key;
private final String value;
WeekDayEnum(int key, String value) {
this.key = key;
this.value = value;
}
public int getKey() { return key; }
public String getValue() { return value; }
// 可选:根据 key 查找枚举(静态工具方法)
public static WeekDayEnum fromKey(int key) {
for (WeekDayEnum day : values()) {
if (day.key == key) {
return day;
}
}
throw new IllegalArgumentException("无效的星期键: " + key);
}
}用户输入 1~7 的整数,输出对应中文星期名称,使用枚举实现。
import java.util.Scanner;
enum DayOfWeek {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
public class WeekdayChecker {
public static DayOfWeek getDayOfWeek(int dayNumber) {
if (dayNumber < 1 || dayNumber > 7) {
return null;
}
return DayOfWeek.values()[dayNumber - 1]; // 利用数组索引,更简洁
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个数字(1 到 7):");
int dayNumber = scanner.nextInt();
DayOfWeek day = getDayOfWeek(dayNumber);
if (day != null) {
System.out.println("对应的星期几是:" + day);
} else {
System.out.println("输入无效的数字");
}
}
}在企业级开发中,枚举常与自定义异常结合,用于统一管理错误码和错误信息。
public enum ErrorCodeEnum {
// 系统级错误(5xx)
SYSTEM_ERROR(50000, "系统内部错误", "系统异常"),
DATABASE_ERROR(50001, "数据库访问异常", "系统异常"),
// 业务逻辑错误(4xx)
INVALID_INPUT(40001, "输入参数无效", "业务异常"),
INSUFFICIENT_BALANCE(40002, "账户余额不足", "业务异常"),
// 用户操作错误(4xx)
USER_NOT_FOUND(40101, "用户不存在", "用户异常"),
INVALID_CREDENTIALS(40102, "用户名或密码错误", "用户异常"),
PERMISSION_DENIED(40301, "无权访问该资源", "用户异常");
private final int code;
private final String message;
private final String category; // 异常类别:系统/业务/用户
ErrorCodeEnum(int code, String message, String category) {
this.code = code;
this.message = message;
this.category = category;
}
public int getCode() { return code; }
public String getMessage() { return message; }
public String getCategory() { return category; }
}public class BusinessException extends RuntimeException {
private final int errorCode;
private final String errorCategory;
public BusinessException(ErrorCodeEnum error) {
super(error.getMessage());
this.errorCode = error.getCode();
this.errorCategory = error.getCategory();
}
public int getErrorCode() { return errorCode; }
public String getErrorCategory() { return errorCategory; }
}
所有业务相关异常都继承此类,携带结构化错误信息。
改造之前的 WeekdayChecker,使用错误码枚举抛出异常:
public class WeekdayService {
public static String getChineseWeekday(int dayNumber) {
if (dayNumber < 1 || dayNumber > 7) {
throw new BusinessException(ErrorCodeEnum.INVALID_INPUT);
}
// 使用 K-V 枚举更直观
return WeekDayEnum.values()[dayNumber - 1].getValue();
}
}
// 主程序
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个数字(1 到 7):");
try {
int input = scanner.nextInt();
String weekday = WeekdayService.getChineseWeekday(input);
System.out.println("对应的星期是:" + weekday);
} catch (BusinessException e) {
System.err.printf("[错误码 %d][%s] %s%n",
e.getErrorCode(),
e.getErrorCategory(),
e.getMessage()
);
} catch (Exception e) {
// 捕获非预期异常(如输入非数字)
System.err.println("[系统错误] 输入格式不正确,请输入整数");
}
}
}请输入一个数字(1 到 7):8
[错误码 40001][业务异常] 输入参数无效通过枚举与异常的有机结合,可构建高内聚、低耦合、易维护的企业级 Java 应用。