Java 枚举是什么?什么是枚举类?枚举类的用途?

目录

1. 什么是枚举?

2. 枚举类

3. 枚举类的用途


1. 什么是枚举?

我们可以从字面意思来理解,枚:一枚一枚的,举:举例,举出,将二者意思结合起来可以理解为一个一个的举出。

这样听起来可能有些模糊,我来给大家说一个场景。

例如我们定义一个月份类,我们肯定已经确定了该类只有1~12月12个类对象,不会再有别的对象了;还有星期数,只有周一~周日七个类对象,不会有星期八这个对象吧。那么如果我们要将这几个对象全部列出来,可以怎么做呢?

首先我们想到的就是创建一个类,然后有几个对象我们就 new 几个对象。 但是这样做有一个问题,如果我们没有私有化它的构造器,开发时不小心有人又创建了其他对象,那岂不是很多余?一个人多创建一个,那么开发人多的时候,创建的对象也会增多,会不会很占用内存,这样是很不友好的。如果我们在一开始就把这些类的对象提前创建出来,并且不让外界再继续创建新的对象,开发人员在有需要的时候直接拿这个类已经创建好的的对象直接使用是不是会更好。由此就引申出来了我们的枚举类。

2. 枚举类

在 Java 中,除了我们平常所熟知的普通 Class 类,它还专门为我们提供了一种枚举类 Eumn。该方法是在 JDK5 之后新增的一个功能,在JDK5以前我们还需要自定义枚举类,现在我们可以直接创建枚举类。

如下图所示,在创建的时候,它就会问你要创建什么类型的类,这个界面大家都不陌生;

对于我们开发人员来说,最常用的是类和接口 ,其它的用的频率没有那么多,我们在学习枚举类的时候,其实可以把它当作普通的类来看待就可以了,我先来创建一个空的枚举类如下代码。

// 定义一个季节枚举类
public enum Season {}

我们在创建好枚举类之后,就可以开始定义它的对象了,我现在定义了的是一个季节枚举类,我们也都知道,季节只有春夏秋冬四个,所以我们就可以在这个枚举类里面定义四个对象分别对应春夏秋冬。

// 定义一个季节枚举类
public enum Season {// 定义春季spring,// 定义夏季summer,// 定义秋季autumn,// 定义冬季winter
}

 这里有几个细节点需要注意!!!

(1)在枚举类中,每个对象前面都是默认添加 public static final 关键词修饰的,public 可以被外界调用。static 静态的可以使用类名.变量名调用,final 修饰不可被外界修改。

(2)每个对象之间使用 "," 分隔开即可,最后一个对象可以不写也可以写 ";" 结尾。

(3)枚举类中已经为各个对象重写了 toString 方法,所以不需要我们再手动添加;

在创建完成对象之后,我们还可以为对象添加属性,这里我给他们添加一个 name 属性,在该枚举类中添加上构造方法

// 定义一个季节枚举类
public enum Season {// 定义春季spring("春"),// 定义夏季summer("夏"),// 定义秋季autumn("秋"),// 定义冬季winter("冬");private String name;private Season(){}private Season(String name){this.name = name;}
}

然乎我们来输出打印一下

创建 main 方法,通过类名.方法名的方式调用,即可咋控制台看到输出结果

3. 枚举类的用途

通过刚才的阐述,我们也可以大致总结出枚举类的用途,当一个类的对象是有限个数时,我们就可以使用枚举类来定义

在 Java 中,多线程的状态便是采用的枚举类,我们来看一下它的源码就可以得知

State 类就是 Thread 线程类中的一个内部枚举类,里面定义了多个线程的状态,例如NEW,RUNNABLE等等,就不一一说了。

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

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

相关文章

浅谈城市轨道交通视频监控与AI视频智能分析解决方案

一、背景分析 地铁作为重要的公共场所交通枢纽,流动性非常高、人员大量聚集,轨道交通需要利用视频监控系统来实现全程、全方位的安全防范,这也是保证地铁行车组织和安全的重要手段。调度员和车站值班员通过系统监管列车运行、客流情况、变电…

ESLint 中的“ space-before-function-paren ”相关报错及其解决方案

ESLint 中的“ space-before-function-paren ”相关报错及其解决方案 出现的问题及其报错: 在 VScode 中,在使用带有 ESLint 工具的项目中,保存会发现报错,并且修改好代码格式后,保存会发现代码格式依然出现问题&…

MySQL数据库学习【进阶篇】

MySQL数据库学习进阶篇 MySQL进阶篇已经更新完毕,点击网址查看👉:MySQL数据库进阶篇

十五、pikachu之CSRF

文章目录 一、CSRF概述二、CSRF实战2.1 CSRF(get)2.2 CSRF之token 一、CSRF概述 Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击&#xf…

基于白鲸算法优化的BP神经网络(预测应用) - 附代码

基于白鲸算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于白鲸算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.白鲸优化BP神经网络2.1 BP神经网络参数设置2.2 白鲸算法应用 4.测试结果:5.Matlab代码 摘要…

k8s 启动和删除pod

k8s创建pod pod的启动流程 流程图 运维人员向kube-apiserver发出指令(我想干什么,我期望事情是什么状态) api响应命令,通过一系列认证授权,把pod数据存储到etcd,创建deployment资源并初始化。(期望状态) controller通过list-wa…

jenkins 发布job切换不同的jdk版本/ maven版本

1. 技术要求 因为有个新的项目需要使用jdk17 而旧的项目需要jdk1.8 这就需要jenkins在发布项目的时候可以指定jdk版本 2. 解决 jenkins全局工具配置页面 配置新的jdk 路径 系统管理-> 全局工具配置 如上新增个jdk 名称叫 jdk-17 然后配置jdk-17的根路径即可(这…

强化自主可控,润开鸿发布基于RISC-V架构的开源鸿蒙终端新品

2023 RISC-V中国峰会于8月23日至25日在北京召开,峰会以“RISC-V生态共建”为主题,结合当下全球新形势,把握全球新时机,呈现RISC-V全球新观点、新趋势。本次大会邀请了RISC-V国际基金会、业界专家、企业代表及社区伙伴等共同探讨RISC-V发展趋势与机遇,吸引超过百余家业界企业、高…

【Go 基础篇】Go语言中的自定义错误处理

错误是程序开发过程中不可避免的一部分,而Go语言以其简洁和高效的特性闻名。在Go中,自定义错误(Custom Errors)是一种强大的方式,可以为特定应用场景创建清晰的错误类型,以便更好地处理和调试问题。本文将详…

关于Incapsula reese84加密的特征研究

最近研究了下reese84的加密算法,基本上两个参数的加密__utmvc和token,因为nodejs调用会有内存问题,没有采用补环境的方式解决,用python扣的算法 1:__utmvc参数的生成是一个ob混淆,ast处理之后调试难度不是很大 测试结…

OpenCV(二):认识Mat容器

目录 1.什么是Mat类 2.Mat类能存储的数据 整数类型(有符号和无符号): 浮点数类型: 布尔类型: 3.Mat类的创建 1.利用矩阵宽、高和类型参数创建Mat类 2.利用矩陈Size(结构和数据类型参数创建Mat类 3.利用已有Mat…

红石外汇|每日汇评:如非农数据疲软的情况下,黄金是否会突破1955美元的100日移动平均线?

1、金价已进入 1,950 美元下方盘整阶段,关注美国非农就业数据; 2、在关键就业数据和美国劳工节长周末之前,美元出现空头回补; 3、9月份开始,金价关注 100 日移动平均线 1955 美元; 金价交易接近一个月高点…

Windows右键添加用 IDEA 打开

1.安装IDEA时 安装时会有个选项来添加,如下: 勾选即可 2.修改注册表 安装时未勾选,可以把下面代码中程序路径改为自己的,保存为对应的 idea.reg文件,双击即可 Windows Registry Editor Version 5.00[HKEY_CLASSES…

Golang单元测试举例

1.第一个例子 cal.go package mainfunc addUpper(n int) int {res : 0for i : 1; i < n; i {res i}return res }func getSub(n1 int, n2 int) int {return n1 - n2 }cal_test.go package main//测试文件名必须是_test.go结尾 //测试函数必须Test开头 import ("fmt…

视频监控人员行为识别算法

视频监控人员行为识别算法通过opencvpython网络模型框架算法&#xff0c;视频监控人员行为识别算法可以识别和判断员工的行为是否符合规范要求&#xff0c;一旦发现不符合规定的行为&#xff0c;视频监控人员行为识别算法将自动发送告警信息。OpenCV的全称是Open Source Comput…

通过 Jetbrains GateWay实现Remote Development

本次环境准备 环境准备&#xff1a;win10、一台安装有树莓派系统的树莓派&#xff08;也可以是其他的服务器&#xff09; 第一步&#xff1a;通过官网下载JetBrains Gateway 官网地址&#xff1a;https://www.jetbrains.com/remote-development/gateway/ 第二步&#xff1a;安装…

python3+requests+unittest:接口自动化测试(一)

简单介绍框架的实现逻辑&#xff0c;参考代码的git地址&#xff1a; GitHub - zhangying123456/python_unittest_interface: pythonunittest接口自动化测试脚本 1.环境准备 python3 pycharm编辑器 2.框架目录展示 &#xff08;该套代码只是简单入门&#xff0c;有兴趣的可…

分布式系统的多数据库,实现分布式事务回滚(1.7.0 seata整合2.0.4nacos)

正文 1、解决的应用场景是分布式事务&#xff0c;每个服务有独立的数据库。 2、例如&#xff1a;A服务的数据库是A1&#xff0c;B服务的数据库是B2&#xff0c;A服务通过feign接口调用B服务&#xff0c;B涉及提交数据到B2&#xff0c;业务是在B提交数据之后&#xff0c;在A服…

git 忽略已经提交的文件或文件夹 (修改.gitignore文件无效)

场景描述&#xff1a;项目开发到一半&#xff0c;追加了模块&#xff0c;提交的时候未注意将不需要提交的文件或者目录提交到.gitignore&#xff0c;然后提交后发现再修改git配置文件已无法阻拦更新&#xff0c;查阅官方资料&#xff1a; 核心点&#xff1a;.gitignore 之前&a…

Sketch 98 中文版-mac矢量绘图设计

Sketch是一款专为Mac操作系统设计的矢量图形编辑软件&#xff0c;被广泛应用于UI/UX设计、网页设计、移动应用设计等领域。Sketch提供了各种工具和功能&#xff0c;包括绘图、图形设计、排版等&#xff0c;可以帮助设计师轻松地创建高质量的矢量图形和模型。Sketch的主要特点包…