Java 枚举(超详细讲解)

Java语言的强大之处在于它提供了多种多样的类库,从而大大提高了程序的编程效率和质量。

一、枚举

事先考虑到某一变量可能的取值,尽可能用自然语言忠表意清楚的单词来表示它的每一个值,用这中思路定义的类型被称为枚举类型。
枚举事由一组固定的常量组成的类型。在Java中每个枚举都继承java.lang.Enum类,使用关键字enum定义。

语法格式:

访问修饰符 enum 枚举名{常量1[,常量2……[ ; ]]//[其他成员]
}
  1. 在枚举中可以定义多个常量,表示不同的枚举值,即枚举元素,之间用逗号隔开。
  2. 在枚举中可以定义其他成员,包括构造方法等,置于枚举常量之后。
  3. 可以使用“枚举名.常量名”的形式取出枚举中的指定内容。

代码示例:

public enum Gender{Male,Female;
}

在以上代码中,Gender中自定义的枚举类型里包含Male、Female两个数据。
在Java中,通常使用枚举表示一组有限的值,实现对输入的值进行约束。下面通过示例学习在程序中如何定义和使用枚举。

代码示例:

public enum Week {MON,TUE,WED,THU,FRI,SAT,SUN;
}
public class WeekTest {public void doWhat(Week day) {switch (day) {case MON:case TUE:case WED:case THU:case FRI:System.out.println("工作日,努力写代码!");break;case SAT:System.out.println("星期六,休息!看电影!");break;case SUN:System.out.println("星期日,休息!打篮球!");break;default:System.out.println("地球上一个星期就7天。");}}public static void main(String[] args) {WeekTest t=new WeekTest();t.doWhat(Week.THU);Week sat=Week.SAT;t.doWhat(sat);for (Week w:Week.values()){t.doWhat(w);}}
}

运行结果:
在这里插入图片描述
在上面代码中,Week.values()表示取得枚举中全部内容,返回一个对象数组,这是枚举本身支持的一个方法。除此之外,关于Enum类的其他用法,此处不深入讲解,以后用到可自行查看API帮助文档

注意:

  1. 在switch结构中可以使用枚举类型作为判断变量,此时需注意,case关键字后一定不能在枚举值前加枚举类型名,如Week.THU,否则会出现编译错误。
    2.enum关键字表示的是java.lang.Enum类型,即使用enum声明的枚举类型,就相当于定义一个类,此类默认继承java.lang.Enum类,因此可使用其中定义的所有方法。

二、枚举的方法

方法描述
T[] values()以数组形式返回枚举类型的所有成员
T valueOf()将普通字符串转换为枚举实例
int compareTo()比较两个枚举成员在定义时的顺序,结果为负整数、零或正整数,表示当前对象小于、等于或大于指定对象
int ordinal()获取枚举成员的索引位置

代码示例:

public enum Week {MON,TUE,WED,THU,FRI,SAT,SUN;
}public class EnumTest {public static void main(String[] args) {//遍历枚举System.out.println("****foreach遍历枚举元素****");for (Week w:Week.values()){System.out.println(w);}System.out.println("****获取枚举的个数****");System.out.println("一周有"+Week.values().length+"天");System.out.println("****使用索引遍历枚举元素****");for (int i = 0; i < Week.values().length; i++) {System.out.println("索引"+Week.values()[i].ordinal()+"值:"+Week.values()[i]+"。");}System.out.println("****枚举元素比较****");//字符串转换为枚举再进行比较System.out.println((Week.valueOf("MON")).equals(Week.MON));System.out.println(Week.FRI.compareTo(Week.TUE));}
}

运行结果:

****foreach遍历枚举元素****
MON
TUE
WED
THU
FRI
SAT
SUN
****获取枚举的个数****
一周有7天
****使用索引遍历枚举元素****
索引0值:MON。
索引1值:TUE。
索引2值:WED。
索引3值:THU。
索引4值:FRI。
索引5值:SAT。
索引6值:SUN。
****枚举元素比较****
true
3

从上面示例中可看出,枚举具有类似数组的特征,每个枚举元素都默认有一个对应的索引值,表示枚举元素的位置,初始值从0开始,能够通过索引访问枚举元素。同时,通过调用枚举类中的方法可以实现 更多样化的数据操作,大大提高了编码效率,避免错误发生,简化代码。

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

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

相关文章

获取淘宝商品评论的爬虫技术分享(已封装API,可测试)

item_review-获得淘宝商品评论 公共参数 请求地址: taobao/item_review 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,it…

零基础机器学习(4)之线性回归的基本原理

文章目录 一、线性回归的基本原理1.相关与回归2.线性回归的原理分析①线性回归的一般公式②线性回归的损失函数③线性回归方程的参数求解方法A.最小二乘法B.梯度下降法 一、线性回归的基本原理 1.相关与回归 相关描述的是变量之间的一种关系。 从统计角度看&#xff0c;变量之…

Nacos介绍和统一配置管理

Nacos&#xff08;全称为 Alibaba Cloud Nacos&#xff0c;或简称为 Nacos&#xff09;是一个开源的分布式服务发现和配置管理系统。它由阿里巴巴集团开发并开源&#xff0c;旨在帮助开发人员简化微服务架构下的服务注册、发现和配置管理。 一、Nacos 提供了以下主要功能&…

Sentry(Android)源码解析

本文字数&#xff1a;16030字 预计阅读时间&#xff1a;40分钟 01 前言 Sentry是一个日志记录、错误上报、性能监控的开源框架&#xff0c;支持众多平台&#xff1a; 其使用方式在本文不进行说明了&#xff0c;大家可参照官方文档&#xff1a;https://docs.sentry.io/platforms…

【No.16】蓝桥杯动态规划下|线性DP装箱问题|计数DP0/1背包的方案数|过河卒|完全背包小明的背包2|最长公共子序列|蓝桥骑士|推荐练习题(C++)

线性DP&#xff0c;0/1背包简化版&#xff0c;装箱问题 【题目描述】有一个箱子容量为V(正整数&#xff0c; 0 ≤ V ≤ 20000 0 \le V \le 20000 0≤V≤20000)&#xff0c;同时有n个物品( 0 < n ≤ 30 0 < n \le 30 0<n≤30)&#xff0c;每个物品有一个体积(正整数)。…

【web前端】CSS语法

CSS语法 1. CSS语法格式 通常情况下语法格式如下: 选择器{属性名:属性值;属性名:属性值;属性名:属性值;... }2. CSS添加方式 2.1 行内样式 直接将样式写在本行的标签内。 <h1><p style"font-size: 48px; color:red;";>行内样式测试</p></…

RHEL9部署Docker环境

华子目录 Docker引擎架构docker引擎架构示意图执行过程示例 RHEL9上安装Docker1.系统要求2.安装yum-utils工具包3.yum安装docker-ce4.配置docker镜像加速docker拉取镜像的过程配置阿里云镜像仓库重新加载守护进程重启Docker服务 5.拉取并运行hello-world镜像6.测试是否安装成功…

SpringCloudAlibaba和SpringCloud的区别

SpringCloudAlibaba实际上对SpringCloud实现拓展组件功能. 1.nacos 分布式配置中心分布式注册中心Eurekaconfig 2.目的是为了推广阿里的产品&#xff0c;如果使用了SpringCloudAlibaba,最好使用alibaba整个体系产品 SpringCloudAlibaba版本对应: 2020.0 分支对应的是 Spring…

ElasticSearch首次启动忘记密码,更改密码(Windows 10)

先启动ElasticSearch 启动方式cmd到lasticsearch-8.12.2\bin目录下输入elasticsearch 启动成功后新开一个窗口输入elasticsearch-reset-password -u elastic

长安链共识算法切换:动态调整,灵活可变

#功能发布 长安链3.0正式版发布了多个重点功能&#xff0c;包括共识算法切换、支持java智能合约引擎、支持后量子密码、web3生态兼容等。我们接下来为大家详细介绍新功能的设计、应用与规划。 随着长安链应用愈加成熟与广泛&#xff0c;一些在生产中很实用的需求浮出水面。长安…

RIPGeo代码理解(五)utils.py( 辅助函数)第一部分

​ 代码链接:RIPGeo代码实现 ├── lib # 包含模型(model)实现文件 │ |── layers.py # 注意力机制的代码。 │ |── model.py # TrustGeo的核心源代码。 │ |── sublayers.py # layer.py的支持文件。 │ |── utils.p…

Linux发布项目(包括前端和后端)到OpenEuler虚拟机上

后端&#xff1a;SpringBoot 前端&#xff1a;VUE3 操作系统&#xff1a;Linux 虚拟机&#xff1a;OpenEuler 发布项目是需要关闭虚拟机上的防火墙 systemctl stop firewalld 一、发布后端项目到虚拟机 1打包后端项目为jar包 2将打包后的jar包放到虚拟机 /opt 目录下 3 运行项…

算法体系-12 第 十二 二叉树的基本算法 下

一 实现二叉树的按层遍历 1.1 描述 1&#xff09;其实就是宽度优先遍历&#xff0c;用队列 2&#xff09;可以通过设置flag变量的方式&#xff0c;来发现某一层的结束&#xff08;看题目&#xff09;看下边的第四题解答 1.2 代码 public class Code01_LevelTraversalBT {publ…

Elsevier(爱思唯尔)如何查询特刊special issue

1. 以Knowledge-Based Systems为例 网站&#xff1a;https://www.sciencedirect.com/journal/knowledge-based-systems 2.具体位置

Linux进程间通信【一】

进程间通信介绍 进程间通信的概念 进程间通信简称IPC&#xff08;Interprocess communication&#xff09;&#xff0c;进程间通信就是在不同进程之间传播或交换信息。 进程间通信的目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程资源共享&#xff1a;多…

linux内核input子系统概述

目录 一、input子系统二、关键数据结构和api2.1 数据结构2.1.1 input_dev2.1.2 input_handler2.1.3 input_event2.1.4 input_handle 2.2 api接口2.2.1 input_device 相关接口input_device 注册流程事件上报 2.2.2 input handle 相关接口注册 handle指定 handle 2.2.3 input han…

基于springboot+vue的电影院购票系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

数码管的动态显示

1.共阴极数码管实现HELLO #include<reg51.h> char str[]{0x76,0x79,0x38,0x38,0x3F}; //HELLO char wei[]{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void delay(int n) {int i0,j0;for(i0;i<n;i){for(j0;j<120;j);} } void seg() {int i;for(i0;i<…

NC 现金流量查询 节点 多账簿联查时,根据所选择的列来判断明细和现金流量联查按钮是否可用,根据添加列选择监听事件处理。

NC 现金流量查询 节点 多账簿联查时&#xff0c;根据所选择的列来判断明细和现金流量联查按钮是否可用&#xff0c;如下图的情况&#xff1a; 在现金流量查询界面UI类的initTable(QueryConditionVO conVO)方法中添加列选择监听事件即可&#xff0c;如下&#xff1a; // 列监听…

LeetCode刷题【树状数组、并查集、二叉树】

目录 树状数组307. 区域和检索 - 数组可修改406. 根据身高重建队列673. 最长递增子序列的个数1409. 查询带键的排列 并查集128. 最长连续序列130. 被围绕的区域 二叉树94. 二叉树的中序遍历104. 二叉树的最大深度101. 对称二叉树543. 二叉树的直径108. 将有序数组转换为二叉搜索…