java枚举类解读

news2024/11/23 20:24:10

目录

为什么需要枚举类

枚举类的使用

枚举类的实现

枚举类的属性

自定义枚举类

使用enum定义枚举类 

常见enum的使用场景

switch

 向枚举中添加新方法

覆盖枚举的方法 

Enum类的主要方法 

实现接口的枚举类


为什么需要枚举类

类的对象只有有限个,确定的。举例如下:

  •  星期:Monday(星期一)、......、Sunday(星期天)
  •  性别:Man(男)、Woman(女)
  •  季节:Spring(春节)......Winter(冬天)
  •  支付方式:Cash(现金)、WeChatPay(微信)、Alipay(支付宝)、BankCard(银行卡)、CreditCard(信用卡)
  •  就职状态:Busy、Free、Vocation、Dimission
  •  订单状态:Nonpayment(未付款)、Paid(已付款)、Delivered(已发货)、Return(退货)、Checked(已确认)Fulfilled(已配货)、
  •  线程状态:创建、就绪、运行、阻塞、死亡

当需要定义一组常量时,强烈建议使用枚举类

枚举类的使用

枚举类的实现


JDK1.5之前需要自定义枚举类
JDK 1.5 新增的 enum 关键字用于定义枚举类
若枚举只有一个对象, 则可以作为一种单例模式的实现方式。

枚举类的属性


枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰
枚举类的使用 private final 修饰的属性应该在构造器中为其赋值
若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数

自定义枚举类

1. 私有化类的构造器,保证不能在类的外部创建其对象
2. 在类的内部创建枚举类的实例。声明为:public static final
3. 对象如果有实例变量,应该声明为private final,并在构造器中初始化

class Season{
    private final String SEASONNAME;//季节的名称
    private final String SEASONDESC;//季节的描述
    private Season(String seasonName,String seasonDesc){
        this.SEASONNAME = seasonName;
        this.SEASONDESC = seasonDesc;
       }
    public static final Season SPRING = new Season("春天", "春暖花开");
    public static final Season SUMMER = new Season("夏天", "夏日炎炎");
    public static final Season AUTUMN = new Season("秋天", "秋高气爽");
    public static final Season WINTER = new Season("冬天", "白雪皑皑");
}

使用enum定义枚举类 

使用说明
使用 enum 定义的枚举类默认继承了 java.lang.Enum类,因此不能再继承其他类
枚举类的构造器只能使用 private 权限修饰符
枚举类的所有实例必须在枚举类中显式列出(, 分隔 ; 结尾)。列出的实例系统会自动添加 public static final 修饰
必须在枚举类的第一行声明枚举类对象
JDK 1.5 中可以在 switch 表达式中使用Enum定义的枚举类的对象作为表达式, case 子句可以直接使用枚举值的名字, 无需添加枚举类作为限定。

public enum SeasonEnum {
    SPRING("春天","春风又绿江南岸"),
    SUMMER("夏天","映日荷花别样红"),
    AUTUMN("秋天","秋水共长天一色"),
    WINTER("冬天","窗含西岭千秋雪");
    private final String seasonName;
    private final String seasonDesc;
    private SeasonEnum(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    public String getSeasonName() {
        return seasonName;
    }
    public String getSeasonDesc() {
        return seasonDesc;
    }
}

常见enum的使用场景

switch

enum Signal {
    GREEN, YELLOW, RED
}
public class test {
    Signal color = Signal.RED;
    public void change() {
        switch (color) {
            case RED:
                color = Signal.GREEN;
                break;
            case YELLOW:
                color = Signal.RED;
                break;
            case GREEN:
                color = Signal.YELLOW;
                break;
        }
    }
}

 JDK1.8之后的switch语句支持byte,short,int,char,数组,enum类型,使用枚举,能让我们的代码可读性更强。
switch(枚举类名){
case 枚举对象名:
break;

}

 向枚举中添加新方法

如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个"分号"。而且 Java 要求必须先定义 enum 实例。

覆盖枚举的方法 

如:toString()方法覆盖,因此拿到枚举对象,直接打印输入此对象的信息而不是一个地址。

Enum类的主要方法 

1.toString():
返回当前枚举类对象常量的名称。拿到枚举对象,直接打印输入此对象的信息而不是一个地址

enum Signal {
    GREEN, YELLOW, RED
}
public class test {
    public static void main(String[] args) {
        Signal yellow = Signal.YELLOW;
        System.out.println(yellow);
    }
}

2.values():
返回枚举类型的对象数组,该方法可以方便的遍历所有的枚举名称

enum Signal {
    GREEN, YELLOW, RED
}
public class test {
    public static void main(String[] args) {
        Signal[] values = Signal.values();
        for (int i = 0; i < values.length; i++) {
            System.out.println(values[i]);
        }
    }
}

3.valuesOf(String str):
可以把一个字符串转为对应的枚举对象。,返回对象信息。

enum Signal {
    GREEN, YELLOW, RED
}
public class test {
    public static void main(String[] args) {
        Signal green = Signal.valueOf("GREEN");
        System.out.println(green);
        Signal green1 = Signal.valueOf("Green");
        System.out.println(green1);
    }
}

需要注意如果获取的对象的字符串不存在,那么将会抛出异常No enum constant

实现接口的枚举类

  • 和普通 Java 类一样,枚举类可以实现一个或多个接口
  • 若每个枚举值在调用实现的接口方法呈现相同的行为方式,则只要统一实现该方法即可。
  • 若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式,则可以让每个枚举值分别来实现该方法

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

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

相关文章

如何将map与对象进行转换

Spring Boot内置了一个强大的JSON转换器Jackson&#xff0c;可以实现将JSON字符串或Map类型的数据转换成Java对象。以下是将Map类型的数据转换成Java对象的示例代码&#xff1a; import com.fasterxml.jackson.databind.ObjectMapper;//定义Java对象 public class User {priva…

oracle客户端的安装教程

文章目录 一、安装前的准备工作 1.1、百度网盘安装包的连接 1.2、百度网盘oracle11g软件包 二、oracle数据库客户端的安装与数据的准备 安装步骤 前言 本文主要讲解oracle客户端的安装与简单使用过程 一、安装前的准备工作 1.1、百度网盘安装包的连接 客户端的软件包 …

STM32 FMC篇-SDRAM(IS42S16400J)

IS42S16400J 这个东西太常见啦&#xff0c;长方形的。不会过多解释&#xff0c;详细请阅读它的数据手册。 IS42S16400J是一种高速同步动态随机存储器(SDRAM)&#xff0c;64Mb的存储容量&#xff0c;采用4个bank&#xff0c;每个bank大小为16Mb&#xff0c;总线宽度为16位&…

【CW32开发】00 开发环境搭建和示例代码运行

1.下载MDK 2.下载芯片相关的固件库 我用的是芯片是CW32F030系列&#xff0c;所以下载相应的固件库 下载地址&#xff1a;https://www.whxy.com/support/filelist/13 3.安装固件库 解压下载的文件&#xff0c;并在cw32f030-stdperiph-lib\IdeSupport\MDK路径下安装固件库 …

064:cesium设置点划线材质(material-8)

第064个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置点划线材质,请参考源代码,了解PolylineDashMaterialProperty的应用。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共89行)相关API参考:专栏…

CBFS Vault 2022 for .NET Crack

将多个文件打包到一个 Vault - 一个“文件中的文件系统”&#xff0c;完成每个文件的压缩、透明加密和随机读/写访问。 亮点包括新的日记选项、用于更好地控制和跟踪的新事件&#xff0c;以及一系列核心性能和可用性改进 [了解更多]。 CBFS保险库 在任何地方存储一个完整的文件…

chatgpt赋能Python-pythone怎么下载

Python下载&#xff1a;在SEO中的作用 介绍 Python是一种广泛应用于编程、自动化任务和数据处理的强大语言。在SEO中&#xff0c;Python也扮演了越来越重要的角色。Python有许多库和工具可供下载&#xff0c;这使得它成为了SEO领域中必不可少的一部分。在本文中&#xff0c;我…

人工智能之读懂CNN卷积神经网络

通过往期文章的分享,我们了解了神经网络的结构,一般分为输入层,隐藏层,输出层 TensorFlow神经网络 那什么是卷积神经网络那,这就要我们追溯一下人类识别图像的原理 人类的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素 Pixels),接着做初步处理(大脑皮层某些细胞发现…

chatgpt赋能Python-pythondna匹配

Python DNA匹配&#xff1a;从概念到应用 概述 DNA匹配是生物学中的一个重要领域&#xff0c;它意味着找到两个DNA序列之间的相似性并确定它们之间的关系。Python是一种被广泛用于生物信息学中的编程语言&#xff0c;它提供了一系列强大的库和工具来处理DNA序列数据&#xff…

【C++从0到王者】第七站:内存管理(520没有对象?那就new一个)

文章目录 一、C/C内存分区二、C语言中动态内存管理方式三、C内存管理方式1.new/delete操作内置类型2.C为什么要搞new和delete3.C中new和delete操作自定义类型4.非要乱用delete和free会造成什么后果&#xff1f; 四、 operator new与operator delete函数五、operator new和opera…

在安卓中压缩GIF的几种方法(附实例代码)

前言 最近在划水摸鱼的时候&#xff0c;看到有位大佬发了一篇 GIF 压缩思路的文章。 让我突然想起来&#xff0c;很久以前我在我的项目 隐云图解制作 中就实现了一个动图工具箱&#xff0c;其中一个功能就是压缩GIF。 不过这位大佬只介绍了其中几种使用方法&#xff0c;还有…

Java动态类型语言支持

JDK7发布字节码首位新成员——invokedynamic指令。以实现动态类型语言支持。也是为JDK8里可以顺利实现Lambda表达式而做的技术储备。我们将在本文详细了解动态语言支持这项特性出现的背景和它的意义与价值。 1 动态类型语言 动态类型语言的关键特征是它的类型检查的主体过程是…

MJ discord 添加应用配置

discord 添加机器人 https://discord.com/developers/applications 刷新token后显示&#xff0c;即机器人Token&#xff0c;后续配置到 mj.discord.bot-token 如图勾选后&#xff0c;打开url进行授权 选择Midjourney Bot所在的服务器 勾上这两个选项&#xff0c;点击 Save Cha…

图片转Excel表格,识别准确率的重要性

摘要&#xff1a;随着科技的不断发展&#xff0c;图片转Excel表格的应用越来越广泛。通过OCR技术实现图片转Excel表格&#xff0c;OCR识别准确率的提高对于信息录入的精度以及后续数据分析的可靠性具有非常重要的作用。本文探讨了影响OCR识别准确率的因素&#xff0c;并提出了提…

2.MATLAB篇——基本操作与矩阵输入

>> cos(((12345)^5)^0.5)ans -0.3623>> help sinsin - 参数的正弦&#xff0c;以弧度为单位此 MATLAB 函数 返回 X 的元素的正弦。sin 函数按元素处理数组。该函数同时接受实数和复数输入。 对于 X 的实数值&#xff0c;sin(X) 返回区间 [-1, 1] 内的实数值。 对于…

数据结构-单调栈2

这里是解了一个新的题目&#xff0c;然后对于有重复值的单调栈做了一些改进&#xff08;只适用于特殊题目&#xff09;&#xff1a;有重复值的单调栈不再使用ArrayList或者LinkedList&#xff0c;而是像无重复值的那样直接使用下标&#xff0c;这种方法能保证最终的正确性&…

Python图片转字符画,太好玩啦(46)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日主题 什么是字符画呢&#xff1f; 如何用Python将图片转为字符画&#xff1f; 我们先找一幅原画&#xff0c;比如它吧&…

亚马逊云科技 一周回顾 – 2022 年 7 月 18 日

上周&#xff0c;Amazon 峰会&#xff08;纽约&#xff09;在贾维茨中心线下举办&#xff0c;有数千名与会者以及 100 多家赞助商和合作伙伴参加。在主题演讲中&#xff0c;Amazon 首席开发人员倡导者 Martin Beeby 谈到了云基础设施的创新如何帮助客户适应挑战并抓住新的机遇。…

知识积累(1)

&#xff08;1&#xff09; 当您在Git中看到消息 "HEAD is now at 1343ccb FAB-17419 Fix off_chain_data sample error (#146)" 时&#xff0c;这是Git告知您当前所在的分支和最新的提交哈希。 这条消息通常出现在使用Git命令后&#xff0c;如git pull或git check…

【Java校招面试】实战面经(四)

目录 前言一、Http协议状态码301和302的区别二、Time Wait状态的作用是什么&#xff1f;三、ConcurrentHashMap在JDK1.7和JDK1.8的区别四、MySQL的优化&#xff1a;怎么优化SQL、用过MySQL的性能分析工具吗&#xff1f;五、反转数组的算法六、JDBC怎么使用的&#xff0c;什么是…