【Java进阶篇】Java中的枚举的概念、有什么特点和好处

news2025/2/5 11:56:32

在这里插入图片描述

✔️Java枚举的概念、特点和好处

  • ✔️枚举的概念
  • ✔️枚举的特点
  • ✔️枚举的好处
  • ✔️拓展知识仓
    • ✔️枚举如何实现的?

✔️枚举的概念


Java枚举是一种特殊的数据类型,它的每一个值都映射到Enum类的构造函数中,具有固定数量的常量值。枚举类型具有简洁、安全和便捷的特性。在Java中,枚举和类、接口的级别相同,可以包含属性、方法、构造方法等。使用enum关键字声明一个枚举类型时,就默认继承自Java中的java.lang.Enum类,并实现了java.lang.Seriablizable和java.lang.Comparable两个接口。所有的枚举值都是public static final的,且非抽象的枚举类不能再派生子类。枚举类的所有实例(枚举值)必须在枚举类的第一行显式地列出,否则这个枚举类将永远不能产生实例。


Java中的枚举(Enum)是一种特殊的类,它被设计用来表示固定数量的常量。枚举在Java中提供了类型安全的方式来表示常量值。枚举可以包含方法、构造函数和初始化块,就像一个完全的类一样。

以下是Java枚举的二个简单示例:


//Demo1
public enum Season {
	SPRING,SUNNER,AUTUMN,WINER;
}

//Demo2
public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY 
}

在这个例子中,我们定义了一个名为Day的枚举,它有7个可能的值:星期日、星期一、星期二、星期三、星期四、星期五和星期六。

然后你可以像这样使用它:

Day day = Day.MONDAY;
System.out.println(day); // 输出 "MONDAY"

枚举还有其他一些有用的特性,例如:

  • 枚举常量默认按照它们在代码中出现的顺序进行排序。
  • 枚举可以包含方法和字段。例如,你可以为每个星期日定义一个字段,并为每个星期日定义一个方法。
  • 枚举支持序列化机制,这意味着枚举常量的序列化与反序列化操作是安全的。

✔️枚举的特点


Java枚举是一种特殊的数据类型,它是一组预定义的常量,每个常量都有一个名称和一个值。枚举类型在Java中被广泛使用,它可以用来代替常量、标志位、状态码等,使代码更加清晰、易读和易维护。以下是对Java枚举特点的详细解释:

  1. 类型安全性:枚举类型可以限制变量的值,从而避免了错误的赋值。
  2. 可读性:枚举类型的名称更加清晰明了,可以提高代码的可读性。
  3. 更好的维护性:枚举类型可以在编译时进行类型检查,可以更早发现问题。
  4. 更好的性能:枚举类型的值是在编译时确定的,因此在运行时访问枚举类型的值会更快。
  5. 更好的组织性:枚举类型可以帮助我们将相关的值组织在一起,使代码更加整洁。
  6. 可扩展性:枚举类型可以轻松地扩展或更新,而不会对其他部分的代码造成影响。
  7. 便于测试:枚举类型可以方便地进行测试,因为它有限且确定的值域。
  8. 支持多态:枚举类型可以支持多态,因为它是一种特殊的类。
  9. 支持构造器和方法:枚举类型支持构造器和方法,可以在其中定义额外的行为或属性。
  10. 具有单例性:枚举类型的每个实例都是唯一的,确保了单例性。
  11. 不可变性:枚举类型是不可变的,它的值在编译时就已经确定,不可更改。
  12. 实现了Comparable和Serializable接口:枚举类型实现了Comparable和Serializable接口,可以方便地进行比较和序列化。
  13. 更好的资源利用:枚举类型的值是在编译时确定的,因此使用枚举类型可以节省内存空间。
  14. 易于维护:枚举类型可以方便地维护和更新,因为它有限且确定的值域。

✔️枚举的好处


Java中枚举的好处如下:


  1. 枚举的ValueOf可以自动对入参进行非法参数的校验
  2. 可以调用枚举中的方法,相对于普通的常量来说操作性更强
  3. 枚举实现接口的话,可以很容易的实现策略模式
  4. 枚举可以自带属性,扩展性强。

✔️拓展知识仓


✔️枚举如何实现的?

如果我们使用反编译,对一个枚举进行反编译的话,就能大致了解他们的实现方式,如上面的Season枚举,反编译后内容如下:


public final class T extends Enum {
	private T(String s, int i) {
		super(s, i);
	}

	public static T[] values() {
		T at[];
		int i;
		T at1[];
		System.arraycopy(at = ENUM$VALUES, 0, at1 = new T[i = at.length], 0, i);
		return at1;
	}

	public static T valueOf(string s) {
		return (T)Enum.valueOf(demo/T,s);
	}

	public static final T SPRING;
	public static final T SUMMER;
	public static final T AUTUMN;
	public static final T WINTER;
	private static final T ENUMSVALUES[];

	static {
		SPRING = new  T("SPRING"0);
		SUMMER = new T("SUMMER"1);
		AUTUMN = new T("AUTUMN"2);
		WINTER = new T(WINTER",3);
		ENUM$VALUES = (new T[] {
		SPRINGSUMMERAUTUMNWINTER
		});
	}
}

通过反编译后代码我们可以看到,public final cass T extends Enum,说明,该类是继承了Enum类的,同时final关键字告诉我们,这个类也是不能被继承的。当我们使用enum来定义一个枚举类型的时候,编译器会自动帮我们创建一个final类型的类继承Enum类,所以枚举类型不能被继承,我们看到这个类中有几个属性和方法。


枚举如何比较

枚举的equals方法底层用的还是==,所以两者都可以

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

台球杆,预计到2026年将达到 6.234 亿美元

台球杆市场多年来一直在稳步增长,这得益于台球作为一种全球娱乐活动的日益普及。2021 年全球台球杆市场价值 5.477 亿美元,预计到 2026 年将达到 6.234 亿美元,预测期内复合年增长率为 2.6%。 就中国市场而言,中国是全球最大的台球…

鹅目标检测数据集VOC格式350张

鹅是一种大型的水禽,常见于湖泊、河流和农田周围。它们的体形庞大,长有长颈和宽阔的翅膀,通常呈灰白色或棕褐色。鹅的头部呈黑色,嘴呈橙色,眼睛则是明亮的蓝色。 鹅是非常社交的动物,常以大群的形式生活在…

YOLOv5改进 | 主干篇 | ShuffleNetV1轻量化网络助力FPS提高(附代码+修改教程)

一、本文内容 本文给大家带来的改进内容是ShuffleNetV1,这是一种为移动设备设计的高效CNN架构。它通过使用点群卷积和通道混洗等操作,减少了计算成本,同时保持了准确性,通过这些技术,ShuffleNet在降低计算复杂度的同时…

C/S医院检验LIS系统源码

一、检验科LIS系统概述: LIS系统即实验室信息管理系统。LIS系统能实现临床检验信息化,检验科信息管理自动化。其主要功能是将检验科的实验仪器传出的检验数据经数据分析后,自动生成打印报告,通过网络存储在数据库中&#xff…

Modbus TCP转Profinet协议网关应用

YC-TCP-PN通讯网关:引领工业通讯新篇章 在工业4.0的浪潮下,高效、稳定的通讯技术成为各行业的核心竞争力。作为行业领军者,我们自豪地推出YC-TCP-PN通讯网关,以其卓越性能打破行业技术壁垒,引领工业通讯进入新篇章。 …

使用 Python 和 PyQt 实现路由算法模拟器

项目地址 GitHub - 944613709/Shortest-Path-Simulation: 网络拓扑图最短路径模拟 引言 在现代网络技术中,路由算法扮演着至关重要的角色。它们决定了数据包在网络中的传输路径,从而影响整个网络的效率和性能。为了更好地理解这些算法的工作原理&…

UG模型的显示与隐藏

在UG中,除了通过图层的方式控制模型的显示与隐藏外,还可以直接通过显示与隐藏命令,位置在菜单-编辑-显示与隐藏,需要注意的是这些命令只能对可视图层中的模型进行控制 显示与隐藏:ctrl w 可以通过模型的类别&#xf…

2014年第三届数学建模国际赛小美赛B题全地形伪装解题全过程文档及程序

2014年第三届数学建模国际赛小美赛 B题 全地形伪装 原题再现: 破坏性着色在军事用途中很常见,用于军用车辆、士兵制服和装备。视觉是人类的主要方向感,伪装的主要功能是欺骗人眼。军事服装中存在大量的伪装图案,以适应作战服装与…

概率论中的 50 个具有挑战性的问题 [第 6 部分]:Chuck-a-Luck

一、说明 我最近对与概率有关的问题产生了兴趣。我偶然读到了弗雷德里克莫斯特勒(Frederick Mosteller)的《概率论中的五十个具有挑战性的问题与解决方案》)一书。我认为创建一个系列来讨论这些可能作为面试问题出现的迷人问题会很有趣。每篇…

审视AI Agent:追捧、落地,和2024年的To B破局点

“十个AI应用里面,五个办公Agent,三个AIGC,还有两成是回春的数字人。”那么,Agent到底是不是大模型的AGI终局产品? 作者|斗斗 编辑|皮爷 出品|产业家 今年4月份,斯坦福和谷歌的研究者共同创建了一个…

账号和权限管理

大家无论安装完linux系统和windows系统后,都会要求你去新建一个用户去登录,不会让你们直接使用超级管理员身份去登录自己的系统,这样是为了安全性的考虑。 一、用户账号和组账号概述 1、用户账号类型: linux用户账号类型&#x…

基于openGauss5.0.0全密态数据库等值查询小案例

基于openGauss5.0.0全密态数据库等值查询小案例 一、全密态数据库简介二、环境说明三、测试步骤四、使用约束 一、全密态数据库简介 价值体现: 密态数据库意在解决数据全生命周期的隐私保护问题,使得系统无论在何种业务场景和环境下,数据在传…

跟着LearnOpenGL学习10--基础光照

文章目录 一、前言二、环境光照三、漫反射光照3.1、法向量3.2、计算漫反射光照3.3、全部代码3.4、法线矩阵 四、镜面光照4.1、全部代码 一、前言 现实世界的光照是极其复杂的,而且会受到诸多因素的影响,这是我们有限的计算能力所无法模拟的。 因此Open…

企业微信自建应用获取用户信息

一.前言 开发企业微信自建应用的时候难免会有获取企微个人信息的业务需求,这篇博客将详细说明企微自建应用获取userId的具体流程. 二.基本概念介绍 2.1 corpid 每个企业都拥有唯一的corpid,获取此信息可在管理后台“我的企业”-“企业信息”下查看“企业…

leetcode 1419. 数青蛙(medium)(优质解法)

链接:力扣(LeetCode)官网 - 全球极客挚的技术成长平台 代码: class Solution {public int minNumberOfFrogs(String croakOfFrogs) {String t"croak";int tLengtht.length();// hash 数组用来存放青蛙喊的过程&#xf…

企业网银 相关注意事项合辑 不断更新中...

山西省农村信用社 (shanxinj.com) 企业网上银行 山西省农村信用社 企业网上银行,注意事项: 1、通过安装【网银向导】修复网银安全控件、密码控件等; 2、登录界面无Ukey验证,也就是输入企业号、用户编号、登录密码及验证码即可进…

ARM12.26

整理三个按键中断代码 key_it.h #ifndef __KEY_IT_H__ #define __KEY_IT_H__ #include"stm32mp1xx_gpio.h" #include"stm32mp1xx_gic.h" #include"stm32mp1xx_exti.h" #include"stm32mp1xx_rcc.h" #include"led.h" void k…

九、Seata的AT模式

目录 9.1 什么是弱一致性 ?9.2 Seata的弱一致性9.3 Seata的AT模式介绍9.4 AT模式流程图9.5 AT模式注意点9.6 全局锁的理解1、认识全局锁2、注册全局锁3、校验(获取)全局锁4、释放锁5、结论 9.7 AT的多数据源场景 9.1 什么是弱一致性 &#xf…

算符优先语法分析设计原理与实现

前言: 作者的词法分析程序以及算符优先语法分析设计程序仓库链接 1、目标任务 **[实验项目] **以专题 1 词法分析程序的输出为语法分析的输入,实现算符优先分析算法,完成以下描述算术表达式的算符优先文法的算符优先分析过程。 G[E]:E→E…