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

枚举在Java体系中的作用

在这里插入图片描述


1. 枚举

枚举是在JDK1.5以后引入的。主要用途是:将一组常量组织起来,在这之前表示一组常量通常使用定义常量的方式:

//用public static final修饰常量
public static final int RED = 1;
public static final int GREEN = 2;
public static final int BLACK = 3;

但是常量列举也存在不合理的地方,当我们想要一个数字1,但是此时RED所代表的值就是1,我们如何确定我们想要用到的是我们定义的常量RED还是单纯的数字1呢?这样的情况下,我们引入了枚举类型,用来表达我们所需要的特殊信息。

1.1 定义

所有的枚举类都默认继承Enum类,也就是说所有的枚举类都是是 java.lang.Enum 的子类

//枚举是个特许的类
修饰符 enum 枚举类名{枚举实例,...,...;
}

示例:

enum Color {RED,GREEN,BLUE;//枚举实例//方法...
}

Java中的枚举实际上就是一个类,也就是说我们在定义枚举类的时候,不仅可以在前面声明枚举实例,还可以定义字段和方法。
实例:

public enum Color {  RED("红色",1),GREEN("绿色",2),BLUE("蓝色",3);  private String name;  private int key;  //枚举的构造方法默认是私有的private Color (String name,int key) {  this.name = name;  this.key = key;  }  public static Color getEnumKey (int key) {  for (Color t : Color.values()) {  if (t.key == key) {  return t;  }  }  return null;  }  public static void main(String[] args) {  System.out.println(getEnumKey(1));  }  
}

运行结果如下:
在这里插入图片描述

这里我们注意到当构造方法是显示提供的有参数的构造方法时,我们的枚举实例也带上了参数,否则编译报错;这是因为我们上面的枚举实例其实就相当于我们普通类调用对应的构造方法实例对象的过程,只不过实例的过程是在枚举类中进行,这是为了确保了枚举常量的唯一性和一致性

总结:

枚举实例时在枚举类加载时自动创建的,不能在枚举类外部创建新的枚举实例,这是因为构造方法是私有的:枚举类的构造方法被声明为 private,这意味着只有枚举类内部可以调用它来创建实例。外部代码无法调用这个构造函数。

1.2 用途

1. switch

使用枚举,能让我们的代码可读性更强。

public static void main(String[] args) {  Color color = Color.GREEN;  switch (color) {  case RED:  System.out.println("red");  break;        case BLUE:  System.out.println("blue");  break; case GREEN:  System.out.println("green");  break;        default:  System.out.println("没有这个枚举实例");break;  }  
}

2. 常用方法

Enum类中的常用方法

方法名作用
values()以数组形式返回枚举类型的所有成员
ordinal()获取枚举成员的索引位置
valueOf()将普通字符串转换为枚举实例,存在这个枚举实列就返回这个枚举实例,不存在就抛出异常
compareTo()比较两个枚举成员在定义时的顺序
public static void main(String[] args) {  Color[] colors = Color.values();  for (int i = 0; i < colors.length; i++) {  System.out.println(colors[i] + " " + colors[i].ordinal());  }  System.out.println("=========================");  System.out.println(Color.valueOf("GREEN"));  //System.out.println(Color.valueOf("WHILE"));//抛出异常  System.out.println("=========================");  //拿到枚举实例BLUE  Color color1 = Color.BLUE;  //拿到枚举实例RED  Color color2 = Color.RED;  System.out.println(color1.compareTo(color2));  
}

在学习完枚举后,我们可以思考以下问题:

为什么枚举实现单列模式是安全的?
枚举在反射中被过滤了,不能通过反射获取枚举类的实例

相关文章:

枚举在Java体系中的作用

1. 枚举 枚举是在JDK1.5以后引入的。主要用途是&#xff1a;将一组常量组织起来&#xff0c;在这之前表示一组常量通常使用定义常量的方式&#xff1a; //用public static final修饰常量 public static final int RED 1; public static final int GREEN 2; public static f…...

『气泡水』Web官网 案例赏析

前言 Schweppes&#xff0c;作为一家享誉全球的气泡水品牌&#xff0c;致力于与年轻消费者建立更紧密的联系&#xff0c;并提升品牌影响力。为此&#xff0c;其打造了一个充满创意和高度互动性的官网&#xff0c;利用前端技术和动画效果&#xff0c;将产品特性与用户浏览体验完…...

【前端】制作一个简单的网页(2)

单标签组成的元素 这类标签不需要内容产生效果&#xff0c;通常表示对网页的某种行为&#xff0c;它们不用标记任何内容&#xff0c;开始即是结束。 比如&#xff0c;<hr>标签的作用是在网页中添加一条分割线&#xff0c;它仅包含开始标签&#xff0c;是一个单标签元素。…...

OpenAI Canvas:提升编程与写作效率的全新工作界面

随着人工智能技术的飞速发展&#xff0c;大语言模型&#xff08;LLM&#xff09;不仅限于生成文本&#xff0c;还能逐步扩展至编程、设计等任务的支持。近期&#xff0c;OpenAI 推出了一个名为 Canvas 的全新功能&#xff0c;专门用于协助用户进行编程和写作。这一功能与 Claud…...

将SpringBoot的Maven项目打成jar包和war包

先需要明确的是&#xff0c;该项目打包的形态是可执行的jar包&#xff0c;还是在tomcat下运行的war包。 springboot自带的maven打包 1.创建一个springboot web项目 1.api控制层HelloWorld.java RestController RequestMapping("/hello") public class HelloWorld …...

【Iceberg分析】Spark与Iceberg集成之常用存储过程

文章目录 Spark与Iceberg集成之常用存储过程调用语法调用样例表快照管理快照回滚根据snapshotid进行回滚根据timestamp进行回滚 设置表当前生效的快照 表元数据管理设置快照过期时间清除孤岛文件重写数据文件运用参数示例optionsGeneral OptionsOptions for sort strategyOptio…...

[旧日谈]关于Qt的刷新事件频率,以及我们在Qt的框架上做实时的绘制操作时我们该关心什么。

[旧日谈]关于Qt的刷新事件频率&#xff0c;以及我们在Qt的框架上做实时的绘制操作时我们该关心什么。 最近在开发的时候&#xff0c;发现一个依赖事件来刷新渲染的控件会导致程序很容易异常和崩溃。 当程序在运行的时候&#xff0c;其实软件本身的负载并不高&#xff0c;所以…...

云上考场小程序+ssm论文源码调试讲解

2 关键技术简介 2.1 微信小程序 微信小程序&#xff0c;简称小程序&#xff0c;英文名Mini Program&#xff0c;是一种全新的连接用户与服务的方式&#xff0c;可以快速访问、快速传播&#xff0c;并具有良好的使用体验。 小程序的主要开发语言是JavaScript&#xff0c;它与…...

城域网——IP城域网、城域以太网、光城域网

一、城域网 1、城域网&#xff08;Metropolitan Area Network&#xff0c;MAN&#xff09;&#xff1a;一个城市范围内所建立的计算机通信网。 2、分布式队列双总线&#xff08;Distributed Queue Dual Bus&#xff0c;DQDB&#xff09;&#xff1a;即IEEE802.6&#xff0c;由…...

华为Eth-trunk链路聚合加入到E-trunk实现跨设备的链路聚合

一、适用场景&#xff08;注&#xff1a;e-trunk与eth-trunk是2个不同的概念&#xff09; 1、企业中有重要的server服务器业务不能中断的情况下&#xff0c;可将上行链路中的汇聚交换机&#xff0c;通过eth-trunk链路聚合技术&#xff0c;实现链路故障后&#xff0c;仍有可用的…...

【网络安全】JSONP劫持原理及攻击实战

未经许可,不得转载。 文章目录 JSONP简介JSONP工作原理JSONP劫持Callback可定义问题JSONP简介 JSONP(JavaScript Object Notation Padding)是一种用于绕过浏览器同源策略限制的技术,使得网页可以从不同域名的服务器请求数据。由于浏览器的同源策略限制,网页通常只能向与其…...

VR全景摄影的拍摄和编辑软件推荐

随着虚拟现实技术的不断进步&#xff0c;VR全景摄影逐渐成为商业、娱乐和教育等多个领域中的重要工具。通过专业的设备与软件&#xff0c;摄影师能够创作出沉浸式的360度全景作品&#xff0c;为观众提供身临其境的视觉体验。在这篇文章中&#xff0c;我们将介绍VR全景摄影的相关…...

linux:使用sar诊断问题

使用sar诊断问题 1. CPU 使用情况2. 内存与交换3. 磁盘 I/O 活动4. 网络 I/O 活动5. 进程与上下文切换6. 系统调用与文件活动7. 电源管理8. 延迟分析9. 系统全局统计10. 查看历史记录11. 特定时间段12. 自动定时采样其他参数&#xff1a;使用实例&#xff1a; sar&#xff08;S…...

CUDA编程技巧(不断搜集更新)

1 使用位运算替换部分乘法或除法 位移操作主要适用于无符号整数&#xff0c;对于带符号数的位移&#xff0c;特别是负数&#xff0c;可能会导致问题&#xff0c;如果你需要对负数执行除法或者乘法&#xff0c;最好谨慎使用位移运算。 1.1 替换除法 当需要将一个数除以 2、4、…...

云计算(第二阶段):mysql后的shell

第一章&#xff1a;变量 前言 什么是shell Shell 是一种提供用户与操作系统内核交互的工具&#xff0c;它接受用户输入的命令&#xff0c;解释后交给操作系统去执行。它不仅可以作为命令解释器&#xff0c;还可以通过脚本完成一系列自动化任务。 shell的特点 跨平台&#xff1a…...

Debian12离线部署Mysql全网最详细教程

一、下载安装所需要的库 1、所需要的库 # 所需要的库有 libc6_2.36-9deb12u8_amd64.deb libgcc-s1_12.2.0-14_amd64.deb libstdc6_12.2.0-14_amd64.deb gcc-12-base_12.2.0-14_amd64.deb psmisc_23.6-1_amd64.deb libnuma1_2.0.18-1_amd64.deb libmecab2_0.996-14b14_amd64.d…...

文本生成视频技术:艺术与科学的交汇点

在人工智能技术的飞速发展下&#xff0c;文本生成视频&#xff08;Text-to-Video&#xff09;技术已经成为现实。这项技术能够根据文本描述生成相应的视频内容&#xff0c;极大地拓展了内容创作的边界。本文将从三个主要方面对文本生成视频技术进行深入探讨&#xff1a;技术能达…...

【Windows】【DevOps】Windows Server 2022 采用WinSW将一个控制台应用程序作为服务启动(方便)

下载WinSW 项目地址&#xff1a; GitHub - winsw/winsw: A wrapper executable that can run any executable as a Windows service, in a permissive license. 下载地址&#xff1a; https://github.com/winsw/winsw/releases/download/v2.12.0/WinSW-x64.exe 参考配置模…...

OpenAI董事会主席Bret Taylor的Agent公司Sierra:专注于赋能下一代企业用户体验

本文由readlecture.cn转录总结。ReadLecture专注于音、视频转录与总结&#xff0c;2小时视频&#xff0c;5分钟阅读&#xff0c;加速内容学习与传播。 视频来源 youtube: https://www.youtube.com/watch?vriWB5nPNZEM&t47s 大纲 介绍 欢迎与介绍 介绍Bret Taylor&#x…...

【linux】信号(下)

8. 阻塞信号 (一)信号其他相关常见概念 实际执行信号的处理动作称为信号递达(Delivery)信号从产生到递达之间的状态,称为信号未决(Pending)进程可以选择阻塞 (Block )某个信号被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作(即被阻塞的信…...

深入解析SAC算法:从最大熵原理到机器人控制实践

1. SAC算法为什么值得关注 第一次听说SAC(Soft Actor-Critic)算法时&#xff0c;我和大多数强化学习新手一样困惑&#xff1a;为什么这个算法能在机器人控制领域迅速走红&#xff1f;直到在机械臂抓取项目中亲自尝试后&#xff0c;我才真正理解它的独特价值。 SAC最吸引人的特点…...

避开Kaggle糖尿病预测的常见坑:数据预处理、特征解读与模型调优实战指南

避开Kaggle糖尿病预测的常见坑&#xff1a;数据预处理、特征解读与模型调优实战指南 在数据科学竞赛中&#xff0c;Kaggle的Pima印第安人糖尿病预测项目是许多初学者的第一个实战项目。表面上看&#xff0c;这似乎是一个简单的二分类问题——但当你真正开始建模时&#xff0c;…...

Hunyuan-MT-7B在学术论文翻译中的精准应用

Hunyuan-MT-7B在学术论文翻译中的精准应用 1. 学术翻译的痛点与挑战 学术论文翻译从来都不是简单的文字转换工作。想象一下&#xff0c;你辛辛苦苦写好的论文&#xff0c;里面充满了专业术语、复杂公式和严谨的参考文献&#xff0c;如果翻译时出现偏差&#xff0c;整个研究的…...

MT5中文数据增强神器:无需训练,直接生成多样化的句子变体

MT5中文数据增强神器&#xff1a;无需训练&#xff0c;直接生成多样化的句子变体 1. 为什么需要中文文本数据增强 在自然语言处理领域&#xff0c;数据是模型训练的基础。但获取高质量的中文标注数据往往面临三大难题&#xff1a; 数据稀缺&#xff1a;特定领域&#xff08;…...

Python 服务优雅停机实战:信号处理、资源收尾与 Kubernetes 滚动发布避坑指南

Python 服务优雅停机实战&#xff1a;信号处理、资源收尾与 Kubernetes 滚动发布避坑指南 客观来看&#xff0c;Python 作为“胶水语言”&#xff0c;以其简洁优雅的语法从 1991 年诞生至今&#xff0c;已深度渗透 Web 开发、数据科学、人工智能和自动化运维等领域。它改变了编…...

NaViL-9B开源镜像免配置教程:无需下载权重,5分钟跑通图文问答

NaViL-9B开源镜像免配置教程&#xff1a;无需下载权重&#xff0c;5分钟跑通图文问答 1. 快速了解NaViL-9B NaViL-9B是由专业研究机构开发的原生多模态大语言模型&#xff0c;它不仅能像普通AI那样进行文字对话&#xff0c;还能看懂图片内容。想象一下&#xff0c;你上传一张…...

命令行玩转JUnit测试:Linux环境配置+批量执行技巧(JDK8/JUnit4.12)

命令行玩转JUnit测试&#xff1a;Linux环境配置批量执行技巧&#xff08;JDK8/JUnit4.12&#xff09; 在持续集成和DevOps实践中&#xff0c;服务器环境下的自动化测试执行能力直接影响交付效率。本文将深入讲解如何在Linux服务器上搭建无IDE的JUnit测试环境&#xff0c;解决依…...

百度网盘提取码智能获取:3分钟解锁加密资源的秘密武器

百度网盘提取码智能获取&#xff1a;3分钟解锁加密资源的秘密武器 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘上那些需要提取码的资源而烦恼吗&#xff1f;每次遇到心仪的学习资料、软件工具或影视资源&…...

【OpenClaw从入门到精通】第46篇:企业“养虾”合规手册——审批备案+专网隔离+全流程管控(2026企业版)

摘要:着OpenClaw在企业场景的广泛应用,合规风险与安全事件频发,启明星辰报告显示60%的安全事件源于缺乏规范管理。本文基于《OpenClaw类智能应用安全指引V0.1》及金融、能源行业头部企业实践,构建“审批-备案-部署-审计”全流程合规框架。核心内容包括四步审批备案流程、专…...

Pi0具身智能v1医疗应用:手术辅助机器人原型

Pi0具身智能v1医疗应用&#xff1a;手术辅助机器人原型 1. 引言 想象一下这样一个场景&#xff1a;外科医生正在进行一台精密的心脏手术&#xff0c;手术台旁的机械臂精准地递送器械&#xff0c;实时调整照明角度&#xff0c;还能在关键时刻提供力反馈提醒。这不是科幻电影&a…...