Java中的enum枚举类型

news2024/11/25 8:42:06

在这里插入图片描述

知识介绍

在Java中,enum(枚举)是一种特殊的数据类型,用于定义一组命名的常量。枚举类型允许你在代码中创建一个固定的、预定义的值集合,这些值可以在整个程序中使用。使用枚举可以使代码更加清晰、可读,并且更安全。

Java的enum类型在JDK 1.5引入,它是一个类的特殊形式,因此可以具有字段、方法和构造函数。以下是关于Java中enum的详细解释:

  1. 定义枚举类型:
    使用enum关键字来定义一个枚举类型。枚举类型应该在一个单独的文件中,并且通常位于一个单独的Java类中。枚举类型的命名通常采用大写字母,多个单词之间使用下划线分隔。

    示例:

    public enum DayOfWeek {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }
    
  2. 枚举常量:
    在枚举类型中,使用逗号分隔的一组常量。这些常量在整个程序中具有唯一性,并且是不可变的,不能在运行时修改。

  3. 枚举方法和字段:
    与普通类一样,枚举可以拥有字段、方法和构造函数。每个枚举常量都是一个实例对象,可以调用枚举类中定义的方法。

    示例:

    public enum DayOfWeek {
        MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY("星期三"),
        THURSDAY("星期四"), FRIDAY("星期五"), SATURDAY("星期六"), SUNDAY("星期日");
    
        private String chineseName;
    
        // 枚举构造函数
        DayOfWeek(String chineseName) {
            this.chineseName = chineseName;
        }
    
        // 枚举方法
        public String getChineseName() {
            return chineseName;
        }
    }
    
  4. 使用枚举类型:
    你可以在程序中使用枚举类型的常量,就像使用普通的静态常量一样。也可以调用枚举类型中定义的方法。

    示例:

    public static void main(String[] args) {
        DayOfWeek today = DayOfWeek.MONDAY;
        System.out.println("Today is " + today);  // 输出:Today is MONDAY
        System.out.println("Chinese name: " + today.getChineseName());  // 输出:Chinese name: 星期一
    }
    
  5. switch语句中的枚举:
    枚举常量经常在switch语句中使用,这样可以增加代码的可读性。

    示例:

    public static void printDayType(DayOfWeek day) {
        switch (day) {
            case MONDAY:
            case TUESDAY:
            case WEDNESDAY:
            case THURSDAY:
            case FRIDAY:
                System.out.println("Weekday");
                break;
            case SATURDAY:
            case SUNDAY:
                System.out.println("Weekend");
                break;
        }
    }
    

适用场景

枚举(enum)在许多情况下都是很有用的。以下是一些通常情况下可以使用枚举的场景:

  1. 代表有限的一组常量:
    当你需要定义一组固定且有限的常量时,可以使用枚举。例如,表示星期几、月份、颜色、状态等都是常见的使用枚举的场景。

    public enum DayOfWeek {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }
    
  2. 提高代码可读性:
    使用枚举可以让代码更加清晰和易读。枚举常量具有描述性的名称,这可以使代码更加自解释,而不是使用普通的整数或字符串常量。

  3. 避免错误:
    枚举常量在编译时就已经确定,并且只能是预定义的值之一。这有助于避免使用错误的值,提高代码的健壮性。同时,IDE的智能提示功能也可以帮助程序员正确选择枚举常量。

  4. switch语句中使用:
    在需要对某个特定类型进行多分支判断时,枚举常量在switch语句中非常有用,提高了代码的可读性。

  5. 限定输入范围:
    当你需要限制输入范围,并确保输入的值是预定义的值时,枚举可以很好地满足这一需求。

  6. 表示状态机:
    枚举常量可以用来表示状态机中的不同状态。例如,一个订单可以有不同的状态,如"待支付"、“已支付”、"已发货"等,这些状态可以用枚举来表示。

说一些心里话:
Java中的enum是一种特殊的数据类型,用于定义一组命名的常量。总的来说,使用枚举可以提高代码的可读性、可维护性和可靠性。如果你需要定义一组固定的常量,或者需要表示一个有限的、预定义的值集合,枚举是一个很好的选择。它可以让你的代码更加清晰、易读,并且减少了潜在的错误。当然,有时候我们会忽略变量的定义,甚至不去使用enum这种枚举类型,但是,这是一种不好的习惯!代码需要规范我们通常看到一些大佬的源码,在适当的情景会经常用到enum枚举类型,所以,我们也应该好好学习,自己也去使用,不能望而生畏,止步不前!我有时候也是柿子挑软的捏,导致自己学习很慢,以此共勉!

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

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

相关文章

Bootload U-Boot分析

Bootloader是在操作系统运行之前执行的一段小程序。通过这段小程序可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。 对于嵌入式系统,Bootloader是基于特定硬件平台来实现的。因此…

【Hystrix技术指南】(5)Command创建和执行实现

创建流程 构建HystrixCommand或者HystrixObservableCommand对象 *使用Hystrix的第一步是创建一个HystrixCommand或者HystrixObservableCommand对象来表示你需要发给依赖服务的请求。 若只期望依赖服务每次返回单一的回应,按如下方式构造一个HystrixCommand即可&a…

FreeRTOS(vTaskList与vTaskGetRunTimeStats)

目录 1、Cube配置 ①配置SYS ②配置TIM3 ③配置USART2 ④配置FreeRTOS ⑤配置中断优先级 2、代码添加改动 ①在main函数合适位置开启TIM3中断 ②修改HAL_TIM_PeriodElapsedCallback函数 ③完善两个相关函数 ④vTaskList与vTaskGetRunTimeStats的使用 vTaskList&#xff…

C# 有效的字母异位词

242 有效的字母异位词 给定两个字符串 和 ,编写一个函数来判断 是否是 的字母异位词。stts 注意:若 和 中每个字符出现的次数都相同,则称 和 互为字母异位词。stst 示例 1: 输入: s “anagram”, t “nagaram” 输出: true 示例 2: 输…

探索国产嵌入式Python解决方案的方法(开源)

大家好,今天我们要介绍一款适用于单片机的嵌入式Python开源项目 -- PikaPython。 第一:嵌入式Python的发展趋势 在嵌入式领域软硬件的发展趋势中,硬件的成本日益降低,性能逐渐提升。这种趋势使得Python在芯片上的运行难度已经大大…

学python的心得体会1000字,学python的心得体会2000字

这篇文章主要介绍了学python的心得体会2000字,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。 1. 初学者应该从简单的练习开始,先掌握基本的语法和概念,…

Three.js光源

目录 Three.js入门 Three.js光源 本文我们将研究three.js中的灯光类型和JavaScript中的光源,探索不同的光源设置。我们的目标是全面理解光源设置和类型,比如环境光、半球光、矩形光、方向光、点光源和聚光灯。我们将逐个介绍它们的属性参数和使用方法…

深度相机常见技术:深度相机的相位求解

1.1 深度相机概述 深度相机是近几年兴起的新技术,相比较传统的相机,深度相机在功能上添加了一个深度测量,从而更方便准确的感知周围的环境及变化。深度相机有很多的应用场景,在我们日常生活中有很多深度相机的影子。那它可以用来…

在线对对联

对对联的起源可以追溯到中国古代,它与中国文化有着密切的关系。 1. 最早的对对联出现在汉朝,当时称为“对句”。它起源于民间,后来逐渐成为文人雅士的精神寄托。 2. 唐代时,对对联的格式更加规范,并被称为“春联”。它成为春节张贴的主要内容,寓意吉祥。 3. 宋代以后,对对联…

小程序商品如何开启返佣

​越来越多的商家开始意识到小程序平台的潜力和价值。开启分销返佣机制是一种有效的方式,可以吸引更多的用户和合作伙伴,提高销售额和品牌知名度。下面将介绍商城小程序商品如何开启返佣。 1. 开启系统分销设置。在管理员后台->营销设置 点击分销功能…

MYSQL --Austindatabases 历年文章合集

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

高速过孔同进同出后续来了!影响大不大由你们自己说

高速先生成员---黄刚 话说Chris在上篇文章的结尾留下的悬念,其实在上周的答题里,也有不少粉丝猜到了接下来要验证的内容。我们知道,任何两个结构如果距离变近了,容性就会增加,无论是孔和孔,线和线&#xf…

JMeter命令行执行+生成HTML报告

1、为什么用命令行模式 使用GUI方式启动jmeter,运行线程较多的测试时,会造成内存和CPU的大量消耗,导致客户机卡死; 所以一般采用的方式是在GUI模式下调整测试脚本,再用命令行模式执行; 命令行方式支持在…

MySQL(1)

MySQL创建数据库和创建数据表 创建数据库 1. 连接 MySQL mysql -u root -p 2. 查看当前的数据库 show databases; 3. 创建数据库 create database 数据库名; 创建数据库 4. 创建数据库时设置字符编码 create database 数据库名 character set utf8; 5. 查看和显示…

redis入门2-命令

Redis的基本数据类型 redis的基本数据类型(value): string,普通字符串 hash(哈希),适合存储对象 list(列表),按照插入顺序排序,可以由重复的元素 set(无序集合),没有重复的元素 sorted set(有序集合)&…

Spring Boot + Vue3前后端分离实战wiki知识库系统十一--文档管理功能开发三

文档内容的显示: 在上一次https://www.cnblogs.com/webor2006/p/17510360.html文档管理模块还差文档的显示木有完成,所以接下来先将这块模块给收尾了。 增加单独获取内容的接口: 概述: 在前端页面文档查询时,只查询了文…

【开源项目--稻草】Day05

【开源项目--稻草】Day05 1. 显示问题列表1.1 显示问题持续时间 2. 显示问题的标签列表2.1 实现过程 3.显示问题的图片4. 实现分页功能4.1 为什么需要分页(翻页)4.2 实现分页的sql语句4.3 PageHelper的使用控制器的调用和VUE代码的重构分页导航条的配置 1. 显示问题列表 上次课…

LISA:通过大语言模型进行推理分割

论文:https://arxiv.org/pdf/2308.00692 代码:GitHub - dvlab-research/LISA 摘要 尽管感知系统近年来取得了显著的进步,但在执行视觉识别任务之前,它们仍然依赖于明确的人类指令来识别目标物体或类别。这样的系统缺乏主动推理…

csdn崩溃了?每次都卡

反馈给了官方客服也没有响应,最近几周都是这样的高频率的转圈圈!这个入口不受重视?这个对于csdn用户来说,是最最基本的入口 如果CSDN(CSDN.net)崩溃了,可能会对以下方面产生影响: 开…

【perl】报错合集

perl报错合集 (注:可能会不定时更新) 1.Name “main::x” used only once: possible typo at … 1.Name "main::x" used only once: possible typo at ...给某个变量赋值但是从来没有用它,或者变量之只用一次但没有…