当前位置: 首页 > news >正文

《Java 100 天进阶之路》第24篇:Java枚举类型 enum 用法

第24篇:Java枚举类型 enum 用法


📌系列导航:《Java 100 天进阶之路》完整目录 |
⬅️ 上一篇:第23篇:缓冲区数据结构 ByteBuffer |
➡️ 下一篇:第25篇:Java类加载与初始化


一、核心知识点

  • enum 的定义和使用
  • enum 的构造器、成员变量和方法
  • enum 的特性:不能继承(隐式继承Enum),可以实现接口
  • values()valueOf()ordinal()方法
  • EnumSetEnumMap简介
  • 枚举单例模式

二、通俗讲解(1分钟开心学)

1. 枚举是什么?

枚举是一种特殊的类,用来定义一组常量。比如星期、季节、状态等。使用枚举可以让代码更清晰、类型安全。

2. 枚举的本质

  • 枚举常量是public static final的实例,在类加载时创建。
  • 枚举的构造器必须是private(默认也是 private),不允许外部创建新实例。
  • 枚举可以定义成员变量、方法,甚至抽象方法(每个常量单独实现)。

3. 常用内置方法

  • values():返回所有枚举常量的数组(顺序为声明顺序)。
  • valueOf(String name):根据名称获取枚举常量,不存在抛IllegalArgumentException
  • ordinal():返回声明顺序索引(从0开始),不建议用于业务逻辑。

4. 枚举的高级用法

  • 实现接口:枚举可以实现接口,所有常量共享该接口方法,也可以各自重写。
  • 枚举单例:枚举单例是线程安全的,且能防止反射攻击,是推荐的单例实现方式。

生活类比
枚举就像一本“日历”,已经印好了周一到周日。你不能自己再创建一个“星期八”。每种星期几都是一个固定的对象。

三、实操代码案例 + 场景说明

场景:定义一个订单状态枚举,包含状态转换逻辑。

publicenumOrderStatus{PENDING(0,"待支付"),PAID(1,"已支付"),SHIPPED(2,"已发货"),COMPLETED(3,"已完成"),CANCELLED(4,"已取消");privatefinalintcode;privatefinalStringdesc;OrderStatus(intcode,Stringdesc){this.code=code;this.desc=desc;}publicintgetCode(){returncode;}publicStringgetDesc(){returndesc;}// 根据code获取枚举publicstaticOrderStatusfromCode(intcode){for(OrderStatusstatus:values()){if(status.code==code)returnstatus;}thrownewIllegalArgumentException("未知状态码: "+code);}// 判断是否可取消publicbooleancanCancel(){returnthis==PENDING;}}// 使用示例publicclassEnumDemo{publicstaticvoidmain(String[]args){OrderStatusstatus=OrderStatus.PAID;System.out.println(status.getDesc());// 已支付System.out.println(status.canCancel());// false// 遍历for(OrderStatuss:OrderStatus.values()){System.out.println(s.name()+"("+s.getCode()+")");}// 根据名称获取OrderStatuspending=OrderStatus.valueOf("PENDING");System.out.println(pending.getDesc());// 单例枚举Singleton.INSTANCE.doSomething();}}// 枚举单例enumSingleton{INSTANCE;publicvoiddoSomething(){System.out.println("单例方法调用");}}

四、避坑要点

错误/误区后果正确做法
使用ordinal()做业务逻辑顺序调整后逻辑错误使用自定义 code 或名称
枚举构造器写成public编译错误构造器只能是private(默认)
==比较枚举(可以,但不了解原因会觉得奇怪)没问题,推荐用==枚举常量是单例,==安全且高效
枚举实现接口时,不同常量可以有不同行为?可以,使用匿名内部类方式在常量后跟{ }实现抽象方法

五、面试高频考点

Q1:枚举如何保证线程安全?

枚举常量是在类加载时由 JVM 创建和初始化的,属于静态成员,JVM 保证类加载的线程安全,因此枚举单例是线程安全的。

Q2:枚举能否继承其他类?能否实现接口?

不能继承其他类(隐式继承了java.lang.Enum),但可以实现多个接口。

Q3:EnumSetEnumMap的优势?

它们是专为枚举设计的集合,内部使用位向量或数组实现,比普通HashSet/HashMap更高效,内存占用更小。

六、练习题

  1. 设计:定义一个Weekday枚举,包含星期一到星期日,添加一个方法isWeekend()判断是否为周末。
  2. 代码补全:实现一个Calculator枚举,每个常量代表一种运算(加、减、乘、除),包含apply(double a, double b)方法。
  3. 简答:为什么推荐用枚举实现单例?

📊 你的学习进度

  • 当前:第24篇 / 共44篇 ·第三阶段:字符串、Buffer、枚举、类加载(第21~25篇)
  • ✅ 已完成:第1~23篇
  • 📖 正在学:第24篇
  • ⏳ 待学习:第25~44篇

👉 📚 完整目录 & 学习指南 | 🔥 订阅本专栏,不错过每一篇

💡 本专栏每篇都包含:避坑表 + 面试高频考点 + 练习题。每天30分钟,100天拿offer!


下一篇文章预告

《Java类加载与初始化》

内容简介:类加载生命周期(加载→验证→准备→解析→初始化),类加载器与双亲委派模型,主动/被动引用。

💡 学完这篇,你将彻底搞懂Java类是如何加载的,面试必考的类加载器问题轻松拿下。

📌《Java 100 天进阶之路 | 从入门到上岗就业》每天一篇,建议收藏 + 关注,一起100天拿offer!
👉 点击关注我,更新后第一时间收到推送!


http://www.rkmt.cn/news/1376806.html

相关文章:

  • 鸿蒙数学 108 篇 第十四篇:正负数本源:阴阳对立的数理表达
  • 鸿蒙数学108篇·全维度学科贯通体系(古今未来无限变量打通总纲)
  • 基于强化学习的序列匹配滤波器:可解释的R波检测新范式
  • 终极指南:免费掌控AMD Ryzen处理器的SMUDebugTool调试工具
  • Equalizer APO深度配置指南:5个专业级技巧提升Windows音频品质
  • adb连接无线wifi
  • 碧蓝航线Alas自动化脚本:告别重复操作,24小时无人值守的游戏管家
  • 【部署实战】一文搞懂!SpringBoot + 前端项目上线,Nginx 到底是怎么做请求转发的?
  • Java 零基础全套教程,面向对象(高级),笔记 105-123
  • RTSP协议研究:技术规范、应用场景与发展趋势
  • 别再死记硬背了!COMSOL ACDC模块场路耦合,手把手教你理清电路节点定义逻辑
  • 从API调用到业务落地:百度OCR车牌识别在智慧园区项目里的实战踩坑记录
  • 构建 AI Agent Harness Engineering 时常见的十个错误
  • UniversalUnityDemosaics:终极Unity游戏去马赛克插件完整指南
  • Unity游戏去马赛克终极指南:5个免费插件完整配置教程
  • 深入剖析 Android 渲染核心:SurfaceFlinger 与图形合成原理
  • 百考通任务书写作,助你一次通过开题审核
  • 低压电工-防雷、防静电、防电磁辐射
  • AI写论文不用怕!4款AI论文生成工具,为你的论文写作保驾护航
  • BetterJoy:在Windows上使用任天堂Switch控制器的终极解决方案
  • MAD-PINN:基于物理信息神经网络的多智能体安全最优控制框架
  • OneMore终极指南:如何3步完成OneNote全局搜索替换
  • 2026在线工业CT选型指引:产线集成方案与主流厂家技术对标 - 品牌推荐大师1
  • DeepBI:AI驱动亚马逊增长的智能引擎
  • 推理服务为什么一上批量采样就开始输出不可复现:从 RNG State 到 Per-Request Stream 的工程实战
  • ParsecVDisplay终极指南:如何在Windows上免费扩展虚拟显示器
  • 干货指南:镀锌铝镁板靠谱生产商推荐与采购技巧 - mypinpai
  • 中文分词与词频统计全流程实战 | 全网独家复现,Python零基础落地篇 引入jieba分词优化+多策略词频统计,助力文本挖掘、舆情分析、学术研究高效落地
  • 2026朔州黄金 铂金 白银 彩金回收口碑榜出炉:这五家店稳居前列,靠谱又放心 - 前途无量YY
  • Driver Store Explorer终极指南:快速清理Windows驱动存储的完整教程