【Java 基础】26 枚举

文章目录

    • 1. 什么是枚举
    • 2. 定义
    • 3. 使用
      • 1)常量
      • 2)遍历
      • 3)switch
    • 4. 属性和方法
      • 1)属性
      • 2)方法
    • 5. 实现原理
    • 6. 使用场景
    • 总结

1. 什么是枚举

枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。

在 Java中,枚举是一种特殊的数据类型,用于表示一组具名的常量。

枚举类型可以包含零个或多个枚举常量,每个常量都是该枚举类型的一个实例。使用枚举可以使代码更加清晰、可读,并避免使用整数或字符串常量进行硬编码。

源码:
在这里插入图片描述

Enum 的定义,我们可以看到它实现了 ComparableSerializable 两个接口,说明了枚举类型可以使用比较器或者序列化操作。

2. 定义

枚举类型是通过 enum 关键字来定义的

示例代码:

public enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

在这个例子中,我们定义了一个名为 Day 的枚举类型,包含了一周的所有天。每个枚举常量都是 Day 类型的一个实例,代表一个特定的天。

3. 使用

1)常量

枚举常量可以直接用于程序中

Day today = Day.SATURDAY;
if (today == Day.SATURDAY || today == Day.SUNDAY) {System.out.println("放假啦!!!");
} else {System.out.println("搬砖中。。。");
}

2)遍历

通过 values() 方法获取枚举类型的所有常量进行遍历

示例代码:

public class Demo {public static void main(String[] args) {for (Day day : Day.values()) {System.out.println(day);}}
}
enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

输出结果:

MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY

3)switch

枚举经常与 switch 语句结合使用,使得代码更加清晰

示例代码:

public class Demo {public static void main(String[] args) {Day today = Day.SATURDAY;switch (today) {case MONDAY:case TUESDAY:case WEDNESDAY:case THURSDAY:case FRIDAY:System.out.println("搬砖中。。。");break;case SATURDAY:case SUNDAY:System.out.println("放假啦。。。");break;default:System.out.println("错误的星期");break;}}
}
enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

输出结果:

放假啦。。。

4. 属性和方法

1)属性

枚举可以包含属性,每个枚举常量可以拥有自己的属性

示例代码:

enum Day {MONDAY("Mon"),TUESDAY("Tue"),WEDNESDAY("Wed"),THURSDAY("Thu"),FRIDAY("Fri"),SATURDAY("Sat"),SUNDAY("Sun");// 自定义属性private final String subName;Day(String subName) {this.subName = subName;}public String getSubName() {return subName;}
}

每个枚举常量都有一个名为 subName 的属性,代表了星期的简写

2)方法

枚举可以定义方法,使得每个枚举常量可以具有自己的行为

示例代码:

enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;// 自定义方法public boolean isWeekend() {return this == SATURDAY || this == SUNDAY;}
}

在这个例子中,我们为枚举定义了一个方法 isWeekend(),用于判断当前枚举常量是否表示周末

5. 实现原理

枚举类型本质上是一种特殊的类

编译器会在创建枚举时自动添加一些特殊的方法,例如 values() 方法用于获取所有枚举常量

6. 使用场景

  • 用枚举替代整数常量和字符串常量

    当程序需要一组常量时,使用枚举可以使得代码更加清晰和可读,避免了硬编码的问题

  • 使用枚举常量的方法提高可读性

    在定义枚举时,考虑为每个常量添加一些相关的方法,提高代码的可读性和可维护性

  • 使用枚举实现单例模式

    枚举天生具备线程安全性和单例特性,可以作为实现单例模式的一种方式

总结

枚举是一种强大的工具,用于表示一组具名的常量。通过枚举,我们可以更清晰地表达代码中的常量集合,并通过相关的属性方法使得代码更加可读、可维护。使用枚举的最佳实践包括替代整数常量和字符串常量、为枚举常量添加有意义的方法、以及利用枚举实现单例模式等。

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

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

相关文章

Windows下使用CMD修改本地IP

在网络适配器界面查看当前网线连接的哪个网口,我当前连的是 以太网 这个名字的: 在windows下使用管理员权限打开CMD命令工具,输入如下命令(如我想本地ip改成192.168.2.4): netsh interface ip set address "以太网" st…

LeetCode Hot100 78.子集

题目: 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 方法:灵神 选 or 不选 class Solution {private final List&…

spring 的概述和入门

​ 我是南城余!阿里云开发者平台专家博士证书获得者! 欢迎关注我的博客!一同成长! 一名从事运维开发的worker,记录分享学习。 专注于AI,运维开发,windows Linux 系统领域的分享! …

信号量的使用和注意事项

大家好,今天给大家介绍信号量的使用和注意事项,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。 信号灯(信号量)集 POSIX 线程中的同步用的是无名信号量 进程间的同步使…

乔拓云平台:微信小程序开发的全新视角与高效路径

随着微信小程序的日益普及,越来越多的人开始关注如何开发自己的小程序。对于没有开发经验的人来说,借助第三方平台如乔拓云,可以轻松实现小程序的开发。本文将介绍微信小程序开发需要学习的东西,并探讨如何借助乔拓云平台进行无经…

基于深度学习的钢铁缺陷检测系统(含UI界面,Python代码,数据集、yolov8)

项目介绍 项目中所用到的算法模型和数据集等信息如下: 算法模型:     yolov8 yolov8主要包含以下几种创新:         1. 添加注意力机制(SE、CBAM等)         2. 修改可变形卷积(DySnake-主干c…

【改进YOLOv8】融合可变形大核注意力D-LKA-Attention的油气管道设备泄露检测系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 随着油气管道设备的广泛应用,油气泄露问题已经成为一个严重的环境和安全隐患。油气泄露不仅会造成环境污染,还可能引发火灾、爆炸等严重事…

掌握vue中国际化使用及配置

文章目录 🍁i18n组件安装🍁项目中配置 vue-i18n🍁编写语言包🍁国际化的使用 随着互联网的普及和全球化的发展,开发国际化的应用程序已经成为一种趋势。因此,将 VUE 应用程序国际化是非常有必要的。 以下是…

新时代商业旨意:传统商家如何变革?

随着新时代的到来,商业环境也在不断变化。在这个信息爆炸、消费者需求日益复杂化的时代,商业旨意已经不再仅仅是追求利润,而是转向了以客户为中心,追求价值共创、社会责任等多元化的目标。传统商家面临着诸多挑战,如何…

2023四川大学“腾讯杯”新生赛(同步赛)糖果(鸽巢原理)

这个数据范围, n 是 1 e 6 , a i 也是 1 e 6 n是1e6,a_i也是1e6 n是1e6,ai​也是1e6,任意 a i a j ∈ [ 0 , 2 e 6 ] a_ia_j \in [0, 2e6] ai​aj​∈[0,2e6],所以如果有答案我们最多枚举 2 e 6 2e6 2e6个数就可以找到…

视频剪辑高手揭秘:如何批量减少时长并调整播放速度,提升视频效果

随着社交媒体的兴起,视频制作的需求越来越大。然而往往视频文件存在一些问题,例如时长过长,或者要调整播放速度以更好地传达信息。这些问题不仅影响了视频的观看体验,也可能导致视频难以在社交媒体上获得广泛的传播。那么&#xf…

Android Canvas 改变背景颜色

我有一个有两个 View 的应用 <com.myexample.ui.view.BackgroundView android:id"id/id_draw_canvas_classroom" android:layout_width"fill_parent" android:layout_height"fill_parent" android:layout_marginBottom"3dp" andro…

[EFI]Atermiter X99 Turbo D4 E5-2630v3电脑 Hackintosh 黑苹果efi引导文件

硬件型号驱动情况主板 Atermiter X99 Turbo D4 处理器 Intel Xeon E5-2630v3 已驱动内存Desktop DDR4 2666 MHz已驱动硬盘Netac NV7000已驱动显卡AMD Radeon RX 5700xt已驱动声卡瑞昱 英特尔 High Definition Audio 控制器ALC897已驱动网卡LucyRTL8125已驱动无线网卡蓝牙Broad…

基于Java个人作品管理系统

基于Java个人作品管理系统 功能需求 1、作品上传&#xff1a;系统允许用户上传各种类型的作品&#xff0c;如文字、图片、音频、视频等。上传过程应简单明了&#xff0c;支持批量上传。 2、作品分类&#xff1a;系统需要提供作品分类功能&#xff0c;用户可以根据自己的需求…

CNN,DNN,RNN,GAN,RL+图像处理常规算法(未完待续)

好的&#xff0c;让我们先介绍一些常见的神经网络模型&#xff0c;然后再讨论图像处理的常规算法。 神经网络模型&#xff1a; 1. CNN&#xff08;卷积神经网络&#xff09; 原理&#xff1a; CNN主要用于处理图像数据。它包含卷积层、池化层和全连接层。卷积层通过卷积操作…

文件夹重命名:提升工作效率,使用关键词替换法重命名文件夹

在日常生活和工作中&#xff0c;经常要处理大量的文件夹和文件。有时候&#xff0c;为了更好地管理和查找文件&#xff0c;要给文件夹重新命名。但是&#xff0c;重命名文件夹并不是一件容易的事情&#xff0c;尤其是当文件夹数量众多时。一个一个修改耗费极大的时间和精力&…

《C++新经典设计模式》之第19章 职责链模式

《C新经典设计模式》之第19章 职责链模式 职责链模式.cpp 职责链模式.cpp #include <iostream> #include <memory> #include <string> using namespace std;// 请求传递给链中的若干对象&#xff0c;哪个对象适合处理就自行处理 // 使多个对象都有机会处理请…

后端返回base64文件前端如何下载

1.后端返回base64格式文件 2.前端代码 <style lang"less" scoped> import "./style/common.less";.table-div-a {color: #409EFF;text-decoration: underline;cursor: pointer; } </style><template><div class"template-con…

一文搞懂什么是Hadoop

Hadoop概念 什么是Hadoop Hadoop是一个由Apache基金会所开发的用于解决海量数据的存储及分析计算问题的分布式系统基础架构。 广义上来说&#xff0c;Hadoop通常指一个跟广泛的概念——Hadoop生态圈。 以下是hadoop生态圈中的技术&#xff1a; Hadoop优势 hadoop组成 HDFS…

一个不错的文章伪原创系统程序源码

一款文章伪原创系统程序源码免费分享&#xff0c;程序是站长原创的。 一共花了站长几天时间写的这个文章伪原创平台&#xff0c;程序无需数据库。 程序前端采用BootStrap框架搭建&#xff0c;后端采用PHP原生书写。 前端伪原创采用Ajax无刷新提交&#xff0c;Ajax转换到词库…