44-枚举(Enum)
1.问题引出常量管理的困难在 Java 中程序中经常会使用到一些固定的、不可修改的值比如星期几、月份、颜色、状态等。在传统的 Java 编程中我们通常使用常量来表示这些固定值常量通常用public static final声明。例如public class Day { public static final int MONDAY 1; public static final int TUESDAY 2; public static final int WEDNESDAY 3; // 其他星期... }在这个例子中使用常量来表示星期几。但这种方式有几个问题类型不安全我们使用int类型来表示不同的星期但如果误用了其他整数如5表示星期六编译器无法发现。可读性差数字1、2、3等并没有表达出它们实际代表的含义星期一、星期二等。容易出错假如开发者在代码中误写了常量名如错写了MONDA或者想要维护新的值时会面临大量的修改和出错的风险。2.新方法解决对比引入枚举类型为了更好地管理常量并解决上述问题Java 提供了枚举类型enum它能让我们以更加结构化和安全的方式处理一组常量。使用枚举类型我们不再使用int或String来表示常量而是通过枚举类型来定义这些常量。新方法的优势类型安全枚举提供了类型检查避免了使用错误的常量值。可读性强枚举通过名字而不是数字或字符串来表示常量使代码更加易于理解。避免重复通过枚举类的唯一实例避免了多个地方定义重复的常量。扩展性如果需要添加新的常量枚举类可以很方便地扩展。3.新方法引出什么是枚举枚举enum是 Java 中的一种特殊类它表示一组固定有限的对象。枚举类通过enum关键字定义枚举中的每个常量其实都是该枚举类型的一个实例。枚举类把具体的对象一个一个具体有限的值例举出来的类。4.枚举的定义我们可以使用enum关键字来定义一个枚举类型。例如我们可以用枚举来表示星期几enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY//等于调用Day这个类的无参构造器 }在这个例子中Day是一个枚举类型它包含了七个常量5.枚举的使用方式1自定义枚举1.类中 将构造器私有化private目的防止被直接 new2.去掉set()方法防止属性被修改。因为枚举对象通常只读3.在类的内部直接创建固定的对象4.再优化可以加入 final 修饰符public class season { public static void main(String[] args) { private String name private String desc//描述 public static final Season SPRING new Season(春天,温暖); public static final Season WINTER new Season(冬天,寒冷); public static final Season AUTUMN new Season(秋天,凉爽); public static final Season SUMMER new Season(夏天,炎热); private Season(String name,String desc){ this.name name; this.desc desc; public String getname(){ return name; } public String getdesc(){ return desc; } public String getdesc() } }细节1枚举对象名通常使用全部大写常量的命名规范2对枚举对象/属性使用 final static 共同修饰实现底层优化3不需要提供set()方法因为枚举对象通常只读4枚举对象根据需要也可以有多个属性2使用enum关键字实现枚举1.使用关键字 enum 替代 class2.public static final Season SPRING new Season(春天温暖”)使用SPRING(春天温暖)替代。形式常量名(实参列表)实参会传给构造器3.如果有多个常量(对象)使用号间隔4.如果使用 enum 来实现枚举要求将定义的常量对象写在最上面public enum season { public static void main(String[] args) { SPRING(春天温暖)WINTER(冬天,寒冷)AUTUMN(秋天,凉爽)SUMMER(夏天,炎热) private String name private String desc//描述 /* public static final Season SPRING new Season(春天,温暖); public static final Season WINTER new Season(冬天,寒冷); public static final Season AUTUMN new Season(秋天,凉爽); public static final Season SUMMER new Season(夏天,炎热);*/ private Season(String name,String desc){ this.name name; this.desc desc; public String getname(){ return name; } public String getdesc(){ return desc; } public String getdesc() } }注意事项1当我们使用 enum 关键字开发一个枚举类时会隐式继承Enum类并且枚举类是一个 final 类2传统的 public static final Season SPRING new Season(春天温暖); 简化成 SPRING(春天”温暖”) 这里必须知道它调用的是哪个构造器。只是简化了但是成员的属性还是public static final 的3如果使用无参构造器 创建 枚举对象则实参列表和小括号都可以省略4当有多个枚举对象时使用,间隔最后有一个分号结尾5枚举对象必须放在枚举类的行首,6使用enum关键字后就不能再继承其它类了因为enum会隐式继承Enum而Java是单继承机制7枚举类和普通类一样可以实现接口。Enum类常用方法一览自己创建的枚举类隐式继承了Enum类所以也可以用父类的方法values()方法返回的是该枚举类所有定义的常量数组示例如何使用枚举表示星期几enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;//使用无参构造器写法 // 示例方法打印出对应的工作日 public boolean isWeekday() { return this ! SATURDAY this ! SUNDAY; } } public class Test { public static void main(String[] args) { // 获取一个枚举常量 Day today Day.MONDAY; // 输出今天是否是工作日 System.out.println(today.isWeekday()); // 输出 true // 增强型 for 循环 遍历枚举常量 for (Day day : Day.values()) { System.out.println(day); } //----------------------------------------------- Day[] days Day.values(); // 获取所有的枚举常量 for (int i 0; i days.length; i) { System.out.println(days[i]); // 通过索引访问每个枚举常量 } } } /*增强型 for 循环是 Java 5 引入的一种新语法简化了遍历数组或集合的过程。它的基本语法如下 for (Type item : collection) { // 使用 item } Type 是集合中元素的类型。 item 是集合中的当前元素。 collection 是被遍历的数组、集合或其他可迭代对象。 这个循环的核心特点是它自动处理了索引和迭代的过程所以你不需要手动维护索引。*/

相关新闻

测试技术体系

测试技术体系

一. 测试技术体系简介与价值软件技术体系是软件开发中所有技术与工具的集合,涵盖了从编程语言、开发框架、数据库、服务器、版本控制工具、开发工具以及测试工具等的全链路。掌握这一体系对测试人员至关重要,其核心价值在于:提升效率与质量&a…

2026/10/25 22:59:39 阅读更多 →
【AI编程】-从零上手 mattpocock/skills(grill-me)

【AI编程】-从零上手 mattpocock/skills(grill-me)

从零上手 mattpocock/skills:用 setup-matt-pocock-skills 和 grill-me 打造企业级 AI 编程工作流 本文面向第一次接触 Agent Skills、Cursor 和 AI 编程工作流的开发者。你不需要先学会 Claude Code、Codex 或复杂的 Agent 框架,跟着本文即可完成安装、…

2026/11/6 15:39:04 阅读更多 →
AI Agent赋能科研数据库管理:从概念到实战

AI Agent赋能科研数据库管理:从概念到实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/31 22:17:50 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/6 15:21:35 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/6 9:29:27 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/5 12:28:01 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/5 12:28:02 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/6 8:08:42 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/5 19:38:59 阅读更多 →

日新闻

周新闻

月新闻