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

JAVA核心基础篇-枚举

什么是枚举

在 Java 中,枚举(Enumeration)是一种特殊的数据类型,用于定义固定数量的常量集合。它在 JDK 1.5 中被引入,提供了一种更优雅、类型安全的方式来表示固定的取值范围。

所谓的枚举就是相当于一种来存放常量的特殊的类。枚举本身就是一个类

枚举的定义

枚举使用enum关键字定义,基本语法如下:

enum 枚举名 {常量1,常量2,...常量n;
}
// 定义一个表示星期的枚举
enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
  • 枚举没有无参构造。
  • 反射不能破坏枚举。
  • 枚举成员的类型默认为,final和public和static修饰
  • 枚举中的构造方法必须用private修饰,所以默认为private,可以省略
  • 构造方法基本使用于有参枚举成员,再通过创建get方法获得参数

使用枚举的优点

  1. 类型安全:枚举常量是类型化的,编译器会检查类型匹配,避免错误赋值
  2. 不可变:枚举常量在定义后不能被修改
  3. 单例性:每个枚举常量都是枚举类的唯一实例
  4. 默认继承 Enum 类:所有枚举都隐式继承java.lang.Enum,因此不能再继承其他类
  5. 可实现接口:枚举可以实现一个或多个接口

枚举使用场景

  • 表示固定的取值范围(如星期、月份、季节等)
  • 状态码定义(成功、失败、警告等)
  • 替代常量定义(相比public static final方式更安全)
  • 开关选项(如性别、是否等二元选项)
  • 在 switch 语句中使用(比整数更易读)

枚举的常用方法

Enum类继承的常用方法:

  • name():返回枚举常量的名称
  • ordinal():返回枚举常量的位置索引(从 0 开始)
  • valueOf(Class<T> enumType, String name):根据名称获取枚举常量
  • values():返回枚举类型的所有常量数组(编译器自动生成)

枚举enum和静态变量的区别

有些时候变量的取值只在一个有限的集合内。例如,一些状态等等;

Java中定义的枚举类型都是Enum类的子类,它可以有构造器,方法和域。还继承了许多方法,toString()、valueOf()、values()等等具体看文档。这让它比静态变量更丰富。

枚举类型是强类型的,从而保证了系统安全性。枚举可以限定参数的个数,对调用者的行为能更加严格地进行控制。把一些运行期的参数检查放到了编译期。通俗的来讲就是枚举更加安全,提高了代码的可读性。

使用静态常量是无法存入更多的属性值使用枚举可以存储code,name,color,feel等信息,而且并没有限制,但是使用静态常量就只能存储code和name两个值还有就是在使用过程中,无法传入的参数进行限制使用枚举时,传入的参数为为Season的枚举类型的数据,这也就限定了参数的范围,降低了代码出错的可能性但是使用静态常量的话,传入的只是一个整型数据,如果使用时传递了一个1-4之外的数,程序时不会报错的,但是在运行时就会出错

枚举提供了一种清晰、安全的方式来处理固定集合的常量,在实际开发中广泛应用,特别是需要提高代码可读性和可维护性的场景。

http://www.dtcms.com/a/346887.html

相关文章:

  • 【Linux网络编程】分布式Json-RPC框架 - 项目设计
  • Java试题-选择题(16)
  • 2025年渗透测试面试题总结-29(题目+回答)
  • 基于ResNet50的血细胞图像分类模型训练全记录
  • 2025-08-23 李沐深度学习19——长短期记忆网络LSTM
  • LeetCode 448.找到所有数组中消失的数字
  • 力扣 第 463 场周赛
  • 两款快速启动软件下载及安装!(GeekDesk和Lucy)!可图标归类!桌面更简洁
  • eBay运营全链路解析:从售后风控到生命周期营销的效率革命
  • 软件测试从入门到精通:通用知识点+APP专项实战
  • 基于STM32设计的养殖场环境监测系统(华为云IOT)_267
  • 8月23日星期六今日早报简报微语报早读
  • 施工场景重型车辆检测识别数据集(挖掘机、自卸卡车、轮式装载机):近3k图像,yolo标注
  • 奇怪的前端面试题
  • UDP报文的数据结构
  • Python训练营打卡Day41-Grad-CAM与Hook函数
  • 【亲测可用】Suno-API 调用使用指南
  • GEO优化服务引领AI时代营销变革 “AI黄金位”成企业竞争新焦点
  • Leetcode—931. 下降路径最小和【中等】
  • Nginx 优化(一)
  • 百度面试题:赛马问题
  • 小迪安全v2023学习笔记(七十讲)—— Python安全SSTI模板注入项目工具
  • 容器安全实践(三):信任、约定与“安全基线”镜像库
  • 博士招生 | 美国圣地亚哥州立大学 Yifan Zhang 课题组博士招生,AI 安全领域顶尖平台等你加入!
  • 使用 LangChain 和 Neo4j 构建知识图谱
  • Linux docker上部署Dify
  • Linux服务环境搭建指南
  • 第四十三天(JavaEE应用ORM框架SQL预编译JDBCMyBatisHibernateMaven)
  • 海外媒体引流进阶:指纹手机的全维度技术支持与实践应用
  • ​崩坏世界观中的安全漏洞与哲学映射:从渗透测试视角解构虚拟秩序的脆弱性​