Java — 枚举
一、枚举简介
枚举是 JDK5 中引入的特性,由 enum
关键字来定义一个枚举类。
格式:
enum 枚举类名 { 枚举项1, 枚举项2, ...; 成员变量; 构造方法 成员方法 }
说明:
- 每个枚举类型隐式继承
java.lang.Enum
,所以枚举类不能再继承其它类。 - 枚举项就是枚举类型的静态常量对象(实例),通过
枚举类型.枚举项名称
访问指定的枚举项。 - 枚举项命名一般使用大写字母,多个枚举项用英文逗号隔开,以英文分号结束。
- 枚举类型的构造方法需要私有化,成员变量只提供 get 方法。
二、枚举作用
一些程序在运行时需要的数据不能是随意的,必须是一定范围内的值。也就是统一管理一些常量。
JDK5 之前采用自定义类来解决,JDK5 之后可以直接采用枚举解决。
示例:
// JDK5之前自定义性别枚举 public class CustomSexEnum { public static final CustomSexEnum man = new CustomSexEnum(1, "男"); public static final CustomSexEnum woman = new CustomSexEnum(2, "女"); private Integer code; private String desc; private CustomSexEnum() { } private CustomSexEnum(Integer code, String desc) { this.code = code; this.desc = desc; } public Integer getCode() { return code; } public String getDesc() { return desc; } }
// JDK5之后定义性别枚举 public enum SexEnum { man(1, "男"), woman(2, "女"); private Integer code; private String desc; private SexEnum() { } private SexEnum(Integer code, String desc) { this.code = code; this.desc = desc; } public Integer getCode() { return code; } public String getDesc() { return desc; } }
测试:
public class Test_01 { public static void main(String[] args) { // 获取男性对应代码及名称 Integer manCode = CustomSexEnum.man.getCode(); String manDesc = CustomSexEnum.man.getDesc(); System.out.println("manCode = " + manCode); System.out.println("manDesc = " + manDesc); // 获取女性对应的代码及名称 Integer womanCode = SexEnum.woman.getCode(); String womanDesc = SexEnum.woman.getDesc(); System.out.println("womanCode = " + womanCode); System.out.println("womanDesc = " + womanDesc); // 枚举就是一个对象 SexEnum man = SexEnum.man; System.out.println(man == SexEnum.man); } }
运行:
manCode = 1 manDesc = 男 womanCode = 2 womanDesc = 女 true
三、枚举实现接口
示例:
// 系统代码接口 public interface SystemCode { // 获取代码 Integer getCode(); // 获取代码描述 String getDesc(); }
// 系统代码接口实现类 public enum SystemCodeEnum implements SystemCode { ERROR(-1, "系统异常"), FAIL(0, "操作失败"), SUCCESS(1, "操作成功"); private Integer code; private String desc; SystemCodeEnum() { } SystemCodeEnum(Integer code, String desc) { this.code = code; this.desc = desc; } @Override public Integer getCode() { return this.code; } @Override public String getDesc() { return this.desc; } }
测试:
public class Test_02 { public static void main(String[] args) { SystemCode systemCode = SystemCodeEnum.SUCCESS; System.out.println("code = " + systemCode.getCode()); System.out.println("desc = " + systemCode.getDesc()); } }
运行:
code = 1 desc = 操作成功
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)