【Java SE】枚举类

枚举(enumeration,简写为 enum)是一种特殊的类,用于表示一组有限的常量。它包含一组特定的、固定的对象。例如,表示季节时,我们可以定义一个枚举来表示春天、夏天、秋天和冬天。如果直接用类来实现季节,可能会出现不合理的情况,比如可以创建一个名字不符的实例,或者随意修改季节的名称,这显然不符合实际情况。因此,使用枚举可以有效解决这些问题。在 Java 中,常见的枚举实现方式有两种:一种是自定义类,另一种是使用 enum 关键字。使用 enum 关键字可以更简洁、更安全地定义常量集合,并限制只能使用预定义的值。

一、自定义类

在使用自定义类实现枚举时,可以先定义一个 Season 类,并在该类中添加一个 name 属性,用于表示季节的名称。同时,我们还需要提供构造方法以及 getter 和 setter 方法来访问和修改这个属性。以下是示例代码:

class Season {private String name;public Season(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

然而,通过分析季节的需求,我们发现之前的类定义无法满足固定取值和只读的要求,因为通过 setter 方法可以随意添加和修改季节名称。因此,我们需要对类的定义进行修改。创建自定义枚举类的步骤包括:

  1. 将构造器私有化,防止直接 new
  2. 删除 setName() 方法,防止属性被修改;
  3. Season 内部直接创建固定对象,通过 static 修饰符对外暴露对象;
  4. 添加 final 修饰符,优化底层。

注意:枚举对象名通常使用全部大写(常量的命名规范)。


public class Season {private String name;public static final Season SPRING = new Season("春天");public static final Season SUMMER = new Season("夏天");public static final Season AUTUMN = new Season("秋天");public static final Season WINTER = new Season("冬天");private Season(String name) {this.name = name;}}

二、使用 enum 关键字

与自定义类的步骤不同,使用enum关键字实现枚举的步骤包括:

  1. 使用enum替代class
  2. 将构造器私有化;
  3. 直接使用常量名(实参列表),若有多个常量对象,使用,间隔,若使用无参构造器,则实参列表和小括号都可省略;
  4. 枚举对象必须放在枚举类的首行。
public enum Season {SPRING("春天"), SUMMER("夏天"), AUTUMN("秋天"), WINTER("冬天");private String name;private Season(String name) {this.name = name;}
}// 使用时
System.out.println(Season.SPRING);

注意:枚举类的构造器总是私有,可以省略 private 修饰符。如果声明一个 enum 构造器为 publicprotected,则会出现语法错误。另外,枚举类和普通类一样,可以实现接口,形式为 enum 类名 implements 接口1,接口2{}

三、enum 常用方法

// 源码定义
public abstract class Enum<E extends Enum<E>>implements Constable, Comparable<E>, Serializable {}

从源码定义来看,当使用 enum 关键字定义一个枚举类时,该枚举类会隐式继承自抽象类 Enum。而 Enum 抽象类实现了多个接口,因此,enum 类可以使用 Enum 类提供的相关方法。常见的方法如下表所示。

方法名描述实例
static Enum valueOf(Class enumClass, String name)返回给定类中有指定名字的枚举常量Season season = Enum.valueOf(Season.class, "SPRING");
String toString()返回枚举常量名Season.SPRING.toString()
int ordinal()返回枚举常量在 enum 声明中的位置,从 0 开始计数Season.SPRING.ordinal()
E[] values()返回定义的所有枚举常量Season[] seasons = Season.values()
int compareTo(E other)若枚举常量位置出现在 other 之前,则返回负整数;如果 this == other,则返回 0;否则,返回正整数season0.compareTo(season1)
final boolean equals(E other)比较两个枚举常量是否相等(也可以用==season0.equals(season1)

注意:使用 enum 关键字后,就不能再继承其它类了,因为 enum 会隐式继承 Enum,而 Java 是单继承机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/469086.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有趣的Midjourney作品赏析(附提示词)

中文提示词&#xff1a;国风少年 C4D软件,高分辨率,超细节,超现实主义, 英文提示词&#xff1a;National Style Youth Cinema4D,high resolution,hyper detailed,surrealism, --niji 6 --ar 1:1 中文提示词&#xff1a;粘土模型&#xff0c;男性穿着中世纪欧洲蓝色盔甲&#x…

时序预测 | gamma伽马模型锂电池寿命预测 EM算法粒子滤波算法结合参数估计

时序预测 | gamma伽马模型锂电池寿命预测 EM算法粒子滤波算法结合参数估计 目录 时序预测 | gamma伽马模型锂电池寿命预测 EM算法粒子滤波算法结合参数估计预测效果基本介绍参考资料 预测效果 基本介绍 gamma伽马模型锂电池寿命预测 EM算法粒子滤波算法结合参数估计 伽马模型、…

男同事36岁,听说被裁拿了12万。今天看到他退了群,但下午领导就反悔了,让他回来,还要把12万补偿退回来

亲爱的读者们&#xff0c;今天咱们来聊聊职场那些事儿。你听说过吗&#xff1f;有位男同事&#xff0c;36岁&#xff0c;被裁了&#xff0c;拿了12万补偿金&#xff0c;然后退了群。你以为这就是结局&#xff1f;不&#xff0c;故事才刚刚开始&#xff01; 想象一下&#xff0…

李佳琦回到巅峰背后,双11成直播电商分水岭

时间倏忽而过&#xff0c;又一年的双11即将宣告结束。 从双11正式开始前的《新所有女生的offer》&#xff0c;到被作为“比价”标杆被其他平台直播间蹭、被与其他渠道品牌比较&#xff0c;再到直播间运营一时手快多发了红包……整个双11周期下来&#xff0c;李佳琦直播间在刷新…

Golang | Leetcode Golang题解之第546题移除盒子

题目&#xff1a; 题解&#xff1a; func removeBoxes(boxes []int) int {dp : [100][100][100]int{}var calculatePoints func(boxes []int, l, r, k int) intcalculatePoints func(boxes []int, l, r, k int) int {if l > r {return 0}if dp[l][r][k] 0 {r1, k1 : r, k…

Python | Leetcode Python题解之第553题最优除法

题目&#xff1b; 题解&#xff1a; class Solution:def optimalDivision(self, nums: List[int]) -> str:if len(nums) 1:return str(nums[0])if len(nums) 2:return str(nums[0]) "/" str(nums[1])return str(nums[0]) "/(" "/".joi…

新手 Vue 项目运行

前言&#xff1a;前面讲了我们已经将spingboot项目运行起来了&#xff0c;现在我们只需将后台管理的Vue项目运行起来即可完成整个项目。 在运行vue项目之前&#xff0c;请先运行springboot项目&#xff0c;运行步骤请看&#xff1a;运行Springboot Vue 项目_springbootvue项目…

光学全息详解

一、光学全息概述 1.1 光学全息的基本思想与原理的概述 光波是电磁波, 随时间振动,并在空间传播。光波照射物体时, 其振幅和相位就被空间调制。物光波的振幅给出物体的亮度(强度)信息, 相位给出物体的方位(深度和位置)信息。若能采用某种方法把物光波的振幅和相位同时记录下来…

自定义包和第三方包

1.自定义包由自己创建&#xff08;创建步骤如下&#xff09; 2.第三方包由大佬开发可通过python安装后自带的pip安装第三方包&#xff08;安装时由于默认连接的是外网网速较慢&#xff0c;可换国内的网如(清华网)&#xff1a;https://pypi.tuna.ysinghua.edu.cn/simple&#x…

SNH48 GROUP燃动杭州 第五届偶像运动会落下帷幕

2024年11月9日&#xff0c;“我们能赢”SNH48 GROUP第五届偶像运动会在杭州运河体育公园盛大开赛&#xff0c;本次运动会由高榕及SNH48郭爽、GNZ48梁娇作为赛事特邀主持人&#xff0c;并于小红书、微信视频号、SNH48 GROUP官方直播APP口袋48及MEET48全程直播。SNH48&#xff08…

Latex使用花体符号\mathbb{R}报错解决办法

一、背景 latex的优势是可以进行自动排版&#xff0c;以及复杂公式的编辑。然而&#xff0c;编辑花体符号R时&#xff0c;使用命令\mathbb{R}报错&#xff0c;编译不通过&#xff0c;这里记录一下解决办法。 二、Latex使用花体符号\mathbb{R}报错解决办法 在LaTeX中&#xf…

当当网创始人李国庆邀您:共襄创客匠人5000人“全球创始人IP领袖高峰论坛”

创客匠人正式官宣&#xff01;当当网原CEO、联合创始人和首席大股东、CRYSTO董事长、CEO李国庆&#xff0c;受邀参加创客匠人5000人“全球创始人IP领袖高峰论坛”&#xff0c;将与我们携手共赴这场巅峰盛宴。 由创客匠人打造的“全球创始人IP领袖高峰论坛”将在2024年12月26日-…

docker安装zookeeper,以及zk可视化界面介绍

1. zookeeper 1.1. zookeeper简单介绍 ZooKeeper 是一个分布式的开源协调服务&#xff0c;最初由 Apache Hadoop 项目开发&#xff0c;用于构建分布式应用程序。它提供了一个简单的接口&#xff0c;允许开发人员实现诸如配置维护、域名服务、分布式同步、组服务等常见任务。Z…

SIwave:释放 SIwizard 求解器的强大功能

SIwave 是一种电源完整性和信号完整性工具。SIwizard 是 SIwave 中 SI 分析的主要工具&#xff0c;也是本博客的主题。 SIwizard 用于研究 RF、clock 和 control traces 的信号完整性。该工具允许用户进行瞬态分析、眼图分析和 BER 计算。用户可以将 IBIS 和 IBIS-AMI 模型添加…

Mac中禁用系统更新

Mac中禁用系统更新 文章目录 Mac中禁用系统更新1. 修改hosts&#xff0c;屏蔽系统更新检测联网1. 去除系统偏好设置--系统更新已有的小红点标记 1. 修改hosts&#xff0c;屏蔽系统更新检测联网 打开终端&#xff0c;执行命令&#xff1a; sudo vim /etc/hosts127.0.0.1 swdis…

macOS 下的 ARM 裸机嵌入式开发入门- 第二部分:实现第一个裸机应用并且调试

1、准备二进制运行程序镜像 利用 QEMU 仿真一个完整的系统&#xff0c;并创建最简单的“Hello world!”示例。 QEMU 模拟器支持 VersatilePB 平台&#xff0c;该平台包含一个 ARM926EJ-S 核心&#xff0c;以及其他外设&#xff0c;四个 UART 串行端口&#xff1b;特别是第一个…

分享三个python爬虫案例

一、爬取豆瓣电影排行榜Top250存储到Excel文件 近年来&#xff0c;Python在数据爬取和处理方面的应用越来越广泛。本文将介绍一个基于Python的爬虫程序&#xff0c;用于抓取豆瓣电影Top250的相关信息&#xff0c;并将其保存为Excel文件。 获取网页数据的函数&#xff0c;包括以…

怎么禁止Ubuntu自动更新升级

怎么禁止Ubuntu自动更新升级 笔者在做MIT 6.S081的时候发现他给我的qemu自动更新了又卡住了&#xff0c;故关闭了自动更新 文章目录 怎么禁止Ubuntu自动更新升级一、图形化修改二、基于命令行修改配置文件的方法 一、图形化修改 1.打开设置->软件和更新->更新 2.选择自…

论文1—《基于卷积神经网络的手术机器人控制系统设计》文献阅读分析报告

论文报告&#xff1a;基于卷积神经网络的手术机器人控制系统设计 摘要 本研究针对传统手术机器人控制系统精准度不足的问题&#xff0c;提出了一种基于卷积神经网络的手术机器人控制系统设计。研究设计了控制系统的总体结构&#xff0c;并选用PCI插槽上直接内插CAN适配卡作为上…

水库大坝安全监测预警方法

一、监测目标 为了确保水库大坝的结构安全性和运行稳定性&#xff0c;我们需要采取一系列措施来预防和减少因自然灾害或其他潜在因素所引发的灾害损失。这不仅有助于保障广大人民群众的生命财产安全&#xff0c;还能确保水资源的合理利用和可持续发展。通过加强大坝的监测和维护…