Java枚举类

深入理解Java枚举类

什么是枚举类?

枚举类(enum)是Java中一种特殊的类,用于表示一组固定的常量。例如,一年四季(春、夏、秋、冬)、一周七天(周一到周日)等。这些常量是预定义的,并且在编译时就确定下来,不会在运行时改变。

枚举类的基本语法

枚举类的定义非常简单,使用关键字enum即可。例如:

public enum Season {SPRING, SUMMER, AUTUMN, WINTER;
}

上述代码定义了一个名为Season的枚举类,包含了四个常量:SPRING, SUMMER, AUTUMN, WINTER。

枚举类的高级用法

在枚举类中,我们可以定义成员变量、构造方法和方法,也可以实现接口。下面是一个复杂的例子,展示了如何使用枚举类:

enum Season implements Info, Info2 {// 枚举常量列表放在类体的最前面,用逗号分隔,最后一个常量以分号结束。SPRING("春天", "chuntian") {// 枚举常量可以重写接口中的方法@Overridepublic void show2() {System.out.println("这是春天");}},SUMMER("夏天", "xiatian") {@Overridepublic void show2() {System.out.println("这是夏天");}};public final String seasonName;public final String seasonDesc;// 枚举类构造方法的构造器是私有的,不能是publicSeason(String seasonName, String seasonDesc) {this.seasonName = seasonName;this.seasonDesc = seasonDesc;}@Overridepublic void show() {System.out.println("都是季节");}
}

枚举类的详细说明

  1. 实现接口:枚举类可以实现一个或多个接口。在上面的例子中,Season枚举类实现了InfoInfo2接口。

  2. 枚举常量:枚举常量列表放在类体的最前面,用逗号分隔,最后一个常量以分号结束。在例子中,SPRINGSUMMERSeason的枚举常量。

  3. 重写方法:枚举常量可以重写接口中的方法。例如,SPRINGSUMMER常量分别重写了show2()方法。

  4. 成员变量:枚举类可以有成员变量。在例子中,seasonNameseasonDescSeason枚举类的成员变量。

  5. 构造方法:枚举类的构造方法是私有的,不能是public。这是因为枚举类的实例是预定义的,不需要外部创建。在例子中,Season的构造方法是私有的。

  6. 方法实现:枚举类可以实现接口中的方法。在例子中,Season实现了show()方法,输出“都是季节”。

枚举类的方法

除了可以实现自定义方法和接口方法,Java枚举类还内置了一些有用的方法:

  1. values():返回所有枚举常量的数组。
for (Season season : Season.values()) {System.out.println(season);
}
  1. valueOf(String name):根据给定的名称返回对应的枚举常量,如果不存在则抛出IllegalArgumentException。
Season summer = Season.valueOf("SUMMER");
System.out.println(summer);
  1. ordinal():返回枚举常量的序数(从0开始)。
System.out.println(Season.SPRING.ordinal()); // 输出:0
  1. name():返回枚举常量的名称。
System.out.println(Season.SUMMER.name()); // 输出:SUMMER

使用枚举类

使用枚举类非常简单,可以直接通过枚举常量进行访问和操作。例如:

public class Main {public static void main(String[] args) {// 访问枚举常量Season spring = Season.SPRING;System.out.println(spring.seasonName); // 输出:春天System.out.println(spring.seasonDesc); // 输出:chuntian// 调用枚举类的方法spring.show();  // 输出:都是季节spring.show2(); // 输出:这是春天// 使用枚举类的内置方法for (Season season : Season.values()) {System.out.println(season);}Season summer = Season.valueOf("SUMMER");System.out.println(summer);System.out.println(Season.SPRING.ordinal()); // 输出:0System.out.println(Season.SUMMER.name()); // 输出:SUMMER}
}

总结

枚举类在Java中非常有用,尤其是在需要表示一组固定常量的时候。通过枚举类,可以确保代码的可读性和安全性。此外,枚举类还可以实现接口、定义成员变量和方法,使其具有更强的功能和灵活性。在实际开发中,合理使用枚举类可以大大提高代码的质量和可维护性。

希望这篇博客能帮助您更好地理解和使用Java枚举类。如果有任何问题或建议,欢迎留言讨论!

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

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

相关文章

【RabbitMQ】一文详解消息可靠性

目录: 1.前言 2.生产者 3.数据持久化 4.消费者 5.死信队列 1.前言 RabbitMQ 是一款高性能、高可靠性的消息中间件,广泛应用于分布式系统中。它允许系统中的各个模块进行异步通信,提供了高度的灵活性和可伸缩性。然而,这种通…

.NET MAUI开源架构_1.学习资源分享

最近需要开发Android的App,想预研下使用.NET开源架构.NET MAUI来开发App程序。因此网上搜索了下相关资料,现在把我查询的结果记录下,方便后面学习。 1.官方文档 1.1MAUI官方学习网站 .NET Multi-Platform App UI 文档 - .NET MAUI | Micro…

Leetcode100.判断两颗二叉树是否相同

题目描述 代码和 leetcode101. 判断二叉树是否对称非常类似 。 答案 public boolean isSameTree(TreeNode p, TreeNode q) {if (p null && q null) { //p,q都为空return true;} else if (p null || q null) { //p和q中只有一个为空return false;} else { //p和q都不…

块设备驱动实现--模拟一个块设备

1、前言 存储层在收到I/O请求后进行数据处理,再给上层应答,本文实现一个实际的块设备驱动。使用Linux5.4为基础,进行框架搭建和功能实现。 2、ko模块与编译 首先定义一个init和exit函数,去注册自己的驱动函数模块。 #include &l…

Open-TeleVision——通过VR沉浸式感受人形机器人视野:兼备远程控制和深度感知能力

前言 7.3日,我司七月在线(集AI大模型职教、应用开发、机器人解决方案为一体的科技公司)的「大模型机器人(具身智能)线下营」群里的一学员发了《Open-TeleVision: Teleoperation with Immersive Active Visual Feedback》这篇论文的链接,我当时快速看了一…

shell脚本之if/case语句

一、条件测试 1、1 返回码 $? $? :返回码,用来判断命令或者脚本是否执行成功。 0 :表示true ,成功;非0 则表示flase ,失败。 1、2 test命令 可以进行条件测试,然后根据返回值来判断条件是否成立 -e…

周末总结(2024/07/13)

工作 人际关系核心实践: 要学会随时回应别人的善意,执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己,抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内 工作上的要点 现状(接受破烂现状,改变…

RISC-V异常处理流程概述(2):异常处理机制

RISC-V异常处理流程概述(2):异常处理机制 一、异常处理流程和异常委托1.1 异常处理流程1.2 异常委托二、RISC-V异常处理中软件相关内容2.1 异常处理准备工作2.2 异常处理函数2.3 Opensbi系统调用的注册一、异常处理流程和异常委托 1.1 异常处理流程 发生异常时,首先需要执…

Linux重要知识点

1. 命令行操作 Linux大多数操作都是通过命令行进行的。熟悉常用命令和脚本是使用Linux的基础。 基本命令:如 ls, cd, cp, mv, rm,这些命令用于文件和目录的管理。文件权限和管理:了解如何使用 chmod, chown, chgrp 等命令来管理文件权限和所…

MySQL数据库相关知识

1、常用知识点 binlog日志? 在MySQL中,术语“schema”和“database”通常是同义词,它们指的是存储数据表、视图、存储过程等数据库对象的逻辑容器。? 2、优化 3、原理

C++:右值引用

右值与左值 在讲解右值引用之前,我们就需要先辨析一下左值与右值的区别。 左值 左值是一个表示数据的表达式,我们可以获取它的地址并且对其赋值,左值可以出现在赋值操作符的左边,但是右值不能。 int i 0; int* p &i; do…

编程题-栈,链栈

概念 栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。 栈顶(Top):线性表允许进行插入删除的那一端。 栈底&#xff0…

4、linux相关基础知识

1、gcc编译过程 .c通过编译生成.o文件,.out目标文件进过链接生成.so库文件。 2、在C中可以使用system(("mkdir -p "path).c_str())创建目录。c_str()把string转化为c字符串,便于system命令识别,system命令会新启动一个进程来创建文…

移动硬盘有盘符打不开:深度解析与高效恢复指南

在数字化信息爆炸的今天,移动硬盘作为便捷的数据存储与传输工具,其重要性不言而喻。然而,当您遇到移动硬盘有盘符却无法正常打开的情况时,无疑会给您的工作和生活带来不小的困扰。本文将深入探讨移动硬盘有盘符打不开的原因&#…

东软“引战”国家队 通用技术“补链”大国重器

向来低调温和的东软创始人刘积仁,这一次抛出了“王炸”级的资产交易。 7月3日,《多肽链》获得一则足以引爆国内医疗设备行业的投资信息:被东软集团视为核心资产、掌上明珠的东软医疗,成功引入通用技术集团资本有限公司与中国国有…

BI佐罗,居然抄袭洗稿我的文章

必须曝光此博主不当行径。 4月2日这天发表的原创文章:BI报表系统建设10大坑,因为都是切身的实际项目经验总结,获得了很多人的关注。 我觉得写文章要写的是亲身、真的做过的专业的项目经验,而不是信口开河随口忽悠。 如果有些博…

Fancybox: 号称世界上最流行的灯箱脚本!这款“花盒“为什么与众不同?

今天要分享的是一个灯箱脚本库:Fancybox。最近了不起刚好用到它。这里就和大家分享下。 简介 Fancybox 是终极的 JavaScript 灯箱替代品,为多媒体显示中的优质用户体验设定了标准。支持图像、视频、地图、内联内容、iframe 和任何其他 HTML 内容。 此…

reverse函数讲解

reverse&#xff1a; 在C中&#xff0c;reverse 是一个标准库函数&#xff0c;用于反转指定范围内的元素顺序。该函数定义在头文件 <algorithm> 中。它的基本用法如下&#xff1a; #include <algorithm> // 包含reverse函数 #include <vector> // 使用v…

如何在SpringCloud中使用Kafka Streams实现实时数据处理

使用Kafka Streams在Spring Cloud中实现实时数据处理可以帮助我们构建可扩展、高性能的实时数据处理应用。Kafka Streams是一个基于Kafka的流处理库&#xff0c;它可以用来处理流式数据&#xff0c;进行流式计算和转换操作。 下面将介绍如何在Spring Cloud中使用Kafka Streams实…

Pytorch中nn.Sequential()函数创建网络的几种方法

1. 创作灵感 在创建大型网络的时候&#xff0c;如果使用nn.Sequential&#xff08;&#xff09;将几个有紧密联系的运算组成一个序列&#xff0c;可以使网络的结构更加清晰。 2.应用举例 为了记录nn.Sequential&#xff08;&#xff09;的用法&#xff0c;搭建以下测试网络&…