Java 枚举的用法及实际使用场景_java enum类用法,零基础入门到精通,收藏这篇就够了
枚举(enum)是 Java 中一种特殊的类,用于定义一组固定的常量。枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景。枚举常量是的,可以直接通过枚举类名访问。通过enumpublic enum 枚举名 {常量1,常量2,常量3;例如:星期另外,枚举还可以定义属性和方法,甚至可以定义构造函数。ACTIVE(1, "激活"),INACTIVE(2, "未激活");//
文章目录
- 一、什么是枚举?
-
- 枚举的主要特点:
- 二、枚举的基本使用方法
-
- 定义枚举
- 三、**实际使用场景**
-
- 代替常量
- 状态机
- 四、更多用法
-
- 1.实现接口
- 2.单例模式
- 3.策略模式
- 总结
一、什么是枚举?
枚举(enum)是 Java 中一种特殊的类,用于定义一组固定的常量。枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景。枚举常量是 public static final 的,可以直接通过枚举类名访问。
枚举的主要特点:
类型安全:限制了变量的取值范围,避免了无效值的传入。
代码简洁:枚举可以代替大量的常量定义,使代码更简洁。
易于维护:枚举将相关的常量集中在一起,便于维护扩展。
二、枚举的基本使用方法
定义枚举
通过 enum 关键字定义,语法如下:
public enum 枚举名 {
常量1,
常量2,
常量3;
}
例如:星期
public enum Week {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
另外,枚举还可以定义属性和方法,甚至可以定义构造函数。例如:
public enum Status {
ACTIVE(1, "激活"),
INACTIVE(2, "未激活");
private int code;
private String description;
// 枚举的构造函数
Status(int code, String description) {
this.code = code;
this.description = description;
}
public int getCode() {
return code;
}
public String getDescription() {
return description;
}
}
枚举类继承自 java.lang.Enum ,有一些自带的方法:比如 name()、ordinal()、values()、valueOf(String)。不过我一般比较少使用这些方法,实际中我会按下面使用枚举。
三、实际使用场景
代替常量
枚举可以用来替代传统的常量定义(如 public static final int),提供更好的可读性和类型安全性。
状态机
表示有限的状态,比如状态、类型等业务数据。例如:
public enum Status
{
OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除");
private final String code;
private final String info;
Status(String code, String info)
{
this.code = code;
this.info = info;
}
public String getCode()
{
return code;
}
public String getInfo()
{
return info;
}
public static String getInfoByCode(String code){
for (Status value : values()) {
if (code.equals(value.code))return value.info;
}
return null;
}
public static List<String> getCodeList(){
List<String> codeList = new ArrayList<>();
for (Status value : Status.values()) {
codeList.add(value.getCode());
}
return codeList;
}
}
四、更多用法
1.实现接口
枚举可以实现接口,从而扩展功能。
像上文中自定义方法 getCode()、getInfo() 、getInfoByCode() 和 getCodeList() 都是单独为这个枚举创建的。
我们可以定义一个通用的接口。
public interface KeyValueEnum<K, V> {
K getKey();
V getValue();
}
然后枚举类可以修改为:
public enum Status implements KeyValueEnum<String, String> {
OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除");
private String key;
private String value;
Status(String key, String value) {
this.key = key;
this.value = value;
}
@Override
public String getKey() {
return key;
}
@Override
public String getValue() {
return value;
}
}
getInfoByCode() 和 getCodeList()可以创建为工具类。
import java.util.ArrayList;
import java.util.List;
public class EnumUtils {
/**
* 根据 key 获取枚举的 value
*
* @param enumClass 枚举类
* @param key key
* @param <K> key 类型
* @param <V> value 类型
* @param <E> 枚举类型
* @return 对应的 value,如果未找到则返回 null
*/
public static <K, V, E extends Enum<E> & KeyValueEnum<K, V>> V getValueByKey(Class<E> enumClass, K key) {
for (E value : enumClass.getEnumConstants()) {
if (value.getKey().equals(key)) {
return value.getValue();
}
}
return null;
}
/**
* 根据 value 获取枚举的 key
*
* @param enumClass 枚举类
* @param value value
* @param <K> key 类型
* @param <V> value 类型
* @param <E> 枚举类型
* @return 对应的 key,如果未找到则返回 null
*/
public static <K, V, E extends Enum<E> & KeyValueEnum<K, V>> K getKeyByValue(Class<E> enumClass, V value) {
for (E e : enumClass.getEnumConstants()) {
if (e.getValue().equals(value)) {
return e.getKey();
}
}
return null;
}
/**
* 获取枚举类的所有 key 值
*
* @param enumClass 枚举类
* @param <K> key 类型
* @param <V> value 类型
* @param <E> 枚举类型
* @return 包含所有 key 的列表
*/
public static <K, V, E extends Enum<E> & KeyValueEnum<K, V>> List<K> getKeyList(Class<E> enumClass) {
List<K> keyList = new ArrayList<>();
for (E value : enumClass.getEnumConstants()) {
keyList.add(value.getKey());
}
return keyList;
}
}
使用工具类:
public class Main {
public static void main(String[] args) {
// 获取 Status 枚举的所有 key 值
List<String> keyList = EnumUtils.getKeyList(Status.class);
System.out.println(keyList); // 输出 ["0", "1", "2"]
// 根据 key 获取 value
String statusValue = EnumUtils.getValueByKey(Status.class, 1);
System.out.println(statusValue); // 输出 "停用"
// 根据 value 获取 key
Integer statusKey = EnumUtils.getKeyByValue(Status.class, "正常");
System.out.println(statusKey); // 输出 0
}
}
2.单例模式
枚举可以用来实现单例模式,确保一个类只有一个实例。
public enum Singleton {
INSTANCE;
public void example() {
System.out.println("枚举实现单例模式");
}
}
那么,为什么枚举可以实现单例模式呢?
枚举(enum)作为单例模式是一种非常优雅且安全的实现方式。主要是因为:
- 枚举常量在 JVM 中是唯一的,每个枚举常量都是枚举类的一个实例。
- 枚举常量在类加载时被初始化,且只会初始化一次。
- 枚举的构造函数是私有的,无法通过反射或手动调用构造函数创建新的实例。
- 枚举的序列化和反序列化由 JVM 保证,反序列化时不会创建新的实例。
3.策略模式
枚举可以用来实现简单的策略模式,每个枚举常量可以定义自己的行为。
比如:进行一些运算。
public enum Operation {
ADD {
public int apply(int a, int b) {
return a + b;
}
},
SUBTRACT {
public int apply(int a, int b) {
return a - b;
}
};
public abstract int apply(int a, int b);
}
总结
枚举的使用可以使代码的可读性更高,更易于维护,并且可以进行一些特定的扩展。但是要注意枚举的使用场景,如果常量特别多或者会频繁变化的值,就不适合使用枚举。
Java开发的就业市场正在经历结构性调整,竞争日益激烈
传统纯业务开发岗位(如仅完成增删改查业务的后端工程师)的需求,特别是入门级岗位,正显著萎缩。随着企业技术需求升级,市场对Java人才的要求已从通用技能转向了更深入的领域经验(如云原生、微服务)或前沿的AI集成能力。这也导致岗位竞争加剧,在一、二线城市,求职者不仅面临技术内卷,还需应对学历与项目经验的高门槛。
大模型为核心的AI领域正展现出前所未有的就业热度与人才红利
2025年,AI相关新发岗位数量同比激增543%,单月增幅最高超过11倍,大模型算法工程师位居热门岗位前列。行业顶尖人才的供需严重失衡,议价能力极强,跳槽薪资涨幅可达30%-50%。值得注意的是,市场并非单纯青睐算法研究员,而是急需能将大模型能力落地于复杂业务系统的工程人才。这使得具备企业级架构思维和复杂系统整合经验的Java工程师,在向“Java+大模型”复合人才转型时拥有独特优势,成为企业竞相争夺的对象,其薪资天花板也远高于传统Java岗位。

说真的,这两年看着身边一个个搞Java、C++、前端、数据、架构的开始卷大模型,挺唏嘘的。大家最开始都是写接口、搞Spring Boot、连数据库、配Redis,稳稳当当过日子。
结果GPT、DeepSeek火了之后,整条线上的人都开始有点慌了,大家都在想:“我是不是要学大模型,不然这饭碗还能保多久?”
先给出最直接的答案:一定要把现有的技术和大模型结合起来,而不是抛弃你们现有技术!掌握AI能力的Java工程师比纯Java岗要吃香的多。
即使现在裁员、降薪、团队解散的比比皆是……但后续的趋势一定是AI应用落地!大模型方向才是实现职业升级、提升薪资待遇的绝佳机遇!
如何学习AGI大模型?
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
2025最新版CSDN大礼包:《AGI大模型学习资源包》免费分享**
一、2025最新大模型学习路线
一个明确的学习路线可以帮助新人了解从哪里开始,按照什么顺序学习,以及需要掌握哪些知识点。大模型领域涉及的知识点非常广泛,没有明确的学习路线可能会导致新人感到迷茫,不知道应该专注于哪些内容。
我们把学习路线分成L1到L4四个阶段,一步步带你从入门到进阶,从理论到实战。

L1级别:AI大模型时代的华丽登场
L1阶段:我们会去了解大模型的基础知识,以及大模型在各个行业的应用和分析;学习理解大模型的核心原理,关键技术,以及大模型应用场景;通过理论原理结合多个项目实战,从提示工程基础到提示工程进阶,掌握Prompt提示工程。

L2级别:AI大模型RAG应用开发工程
L2阶段是我们的AI大模型RAG应用开发工程,我们会去学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

L3级别:大模型Agent应用架构进阶实践
L3阶段:大模型Agent应用架构进阶实现,我们会去学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造我们自己的Agent智能体;同时还可以学习到包括Coze、Dify在内的可视化工具的使用。

L4级别:大模型微调与私有化部署
L4阶段:大模型的微调和私有化部署,我们会更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调;并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

整个大模型学习路线L1主要是对大模型的理论基础、生态以及提示词他的一个学习掌握;而L3 L4更多的是通过项目实战来掌握大模型的应用开发,针对以上大模型的学习路线我们也整理了对应的学习视频教程,和配套的学习资料。
二、大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)

三、大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。

四、大模型项目实战
学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

五、大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)