什么是枚举

2023-05-16

什么是枚举

简单来说,枚举就是一个类有有限个确定的对象。

有限个”就不用解释了,如果说枚举有无限个对象,那它和普通的类又有什么区别呢?

确定的”就是指枚举类的所有对象都是不可变的。

这里我给个例子解释一下:

public class Season {
    private String name;
    private String idiom; //成语

    private Season(String name, String idiom) {
        this.name = name;
        this.idiom = idiom;
    }

    private static final Season spring = new Season("Spring", "春暖花开");
    private static final Season summer = new Season("Summer", "烈日炎炎");
    private static final Season autumn = new Season("Autumn", "秋高气爽");
    private static final Season winter = new Season("Winter", "寒风凛冽");

    public String getName() {
        return name;
    }

    public String getIdiom() {
        return idiom;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", idiom='" + idiom + '\'' +
                '}';
    }
}

首先构造方法是私有化的,所以Season类只有四个对象。

使用了“private static final”修饰这四个对象,所以可以通过类名来找到对象,并且对象是不可变的。

属性也是私有话的,所以即使得到对象,也不能改变它的属性。

最后就是提供一些方法来获取对象的属性。

为什么要使用final呢

这里要明确的是final修饰的是对象名,虽然对象的属性是不可变的,但是对象名的引用是可以变的。比如说如果没有用final修饰的话:

Season.spring = Season.summer;

System.out.println(Season.spring.getName);

返回值是Summer。

JDK1.5之后

随着枚举越来越广泛的应用,JDK1.5之后出现了关键词enum来专门创建枚举类。

public enum Season {
    spring("Spring", "春暖花开"),
    summer("Summer", "烈日炎炎"),
    autumn("Autumn", "秋高气爽"),
    winter("Winter", "寒风凛冽");
    
    private String name;
    private String idiom; //成语

    private Season(String name, String idiom) {
        this.name = name;
        this.idiom = idiom;
    }

    public String getName() {
        return name;
    }

    public String getIdiom() {
        return idiom;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", idiom='" + idiom + '\'' +
                '}';
    }
}

使用enum来创建枚举类有一些额外的要求:

首先所有的对象都必须放在最前面。

其次:

private static final Season spring = new Season("Spring", "春暖花开");

创建对象时“private static final Season”和”new Season“都是重复的,所以没有写的必要,简化为

spring("Spring", "春暖花开"),

需要注意的是对象之间用逗号链接,最后用分号和其他语句隔开。


如果枚举类的底层没有任何属性,那么它就会变得非常简洁:

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

note:

enum定义的枚举类上层父类是java.lang.Enum,而自定义的枚举类上层父类是Object。

Enum类常用的方法:

(还是以上面的例子为例)

  1. SPRING.toString()返回对象的名称
  2. Season.values()返回对象数组
  3. Season.valueOf(“SPRING”)返回特定对象(要求以对象名为参数)

Enum类实现接口:

情况1:所有对象对接口方法的实现相同

public enum Season {
    SPRING,
    SUMMER,
    AUTUMN,
    WINTER;
    
    //在这里实现接口方法
}

情况2:对象对接口方法的实现不同

public enum Season {
    SPRING(//在这里实现接口方法
    ),
    SUMMER(//在这里实现接口方法
    ),
    AUTUMN(//在这里实现接口方法
    ),
    WINTER(//在这里实现接口方法
    );
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是枚举 的相关文章

  • SRE-Google运维解密随记-3-分布式系统的监控

    监控的大部分通用的术语 xff1a 监控 monitoring 收集 处理 汇总 xff0c 并且显示关于某个系统的实时量化数据 xff0c 例如请求的数量和类型 xff0c 错误的数量和类型 xff0c 以及处理用时 xff0c 应用服务
  • SRE-Google运维解密随记-4

    自动化系统的演进 草率地进行自动化可能在解决问题的同时产生出其他问题 因此 xff0c 虽然我们认为在大多数情况下以软件为基础的自动化是优于手动操作的 xff0c 但是比 这两个选择更好的方案是一个不需要这些的系统设计一个自治的系统 或者换
  • linux下查看wwn号

    linux终端命令行中通过 cat sys class fc host host port name 命令查看wwn号即可 cat sys class fc host host port name
  • Linux系统权限集中管理项目案例实践

    目录 1 1 etc syduoers配置语法注意事项 1 2 etc sudoers配置文件别名知识 1 3 在 etc sudoers配置文件中 xff0c 别名和配置语法的对应关系表 1 4 利用别名配置授权实践案例 2 企业环境中用
  • 故障记录-磁盘性能下降导致节点触发迁移

    2023 03 11 11 28 52 012 ERROR 139673393420032 send ZMQ message to tcp 9765 failed 34 action 34 34 get pool status 34 34
  • gsch和redirfs模块导致系统hang或者重启 。

    Trend Micro Deep Security Agent 与Gluster 文件系统不兼容导致夯机 modules 34 gsch and redirfs 34 causing frequent kernel panic Trend
  • RedHat Linux系统故障修复—— grub引导、MBR损坏修复过程

    一 故障问题 MBR损坏是一种非常常见的错误 xff0c 两种情况 xff1a 1 MBR文件损坏 2 grub目录被误删除 1 首先 xff0c MBR是安装在硬盘的第一个扇区上占用了512个字节 xff0c 其中前446字节是bootl
  • 在救援模式下收集 sosreport

    问题 如何在救援模式下收集 sosreport xff1f 对于无法正常启动的操作系统 xff0c 如何收集 sosreport xff1f Red Hat Enterprise Linux 系统无法启动 当技术支持人员需要相关信息来进行问
  • 在Linux系统救援环境中实现联网

    环境 救援环境下的红帽企业 Linux 5 6 7 8 9 问题 生成了 sosreport 在初始救援环境设置期间未启用网络 解决方案 使用 IP 命令套件 iproute 包 xff1a 1 ip link 将显示连接到系统的可用设备
  • Rsa读取pem公钥和私钥

    1 把pem文件用text打开 xff0c 把开头和结尾的begin和end内容删去 xff0c 只留下字符串内容 xff1b 2 用流读取文件中的字符串 xff1b 3 用以下代码生成公钥和私钥对象 xff1b public static
  • 当 rsync/scp 不可用时,从系统传输文件或者 sosreport。

    环境 红帽企业 Linux 5 x红帽企业 Linux 6 x红帽企业 Linux 7 x 问题 文件需要转移到另一个系统 xff0c 但是ssh和rsync未设置和 或允许 一个sosreport需要转移到另一个系统 红帽企业 Linux
  • 如何配置Linux操作系统内DNS配置不被DHCP自动更新

    问题原因 NetworkManager是一个软件工具 xff0c 旨在简化计算机网络的使用 NetworkManager可用于基于Linux内核和其他类Unix操作系统 目前主流Linux操作系统都使用NetworkManager进行网络自
  • 2021-09-27

    虚拟环境中用pip下载安装包却安装到base环境解决方案 原因解决方案 遇到的问题 xff1a windows环境下进入虚拟环境 xff0c 使用pip install指令安装包时发现没有安装到虚拟环境下 xff0c 而是安装到了base环
  • 网络服务(Neutron)安装配置 ,这一篇就够了!

    实验目标 OpenStack Networking xff08 neutron xff09 xff0c 允许创建 插入接口设备 xff0c 这些设备由其它的OpenStack服务管理 插件式的实现可以容纳不同的网络设备和软件 xff0c 为
  • ssh服务和日志的基本常识

    查看网桥 brctl show 创建链接 ln s mnt dir file mnt lianjie 1 查看进程 gnome system monltor ps 当前shell的进程 A 所有的进程 a shell中所有的进程 xff0c
  • ESP8266基础详细使用

    前言 刚买一块ESP8266 琢磨一天才弄明白怎么使用 xff0c 小白第一次弄这个确实不太友好 xff0c 这里记录一下 xff0c 怕以后自己用到又忘了 xff0c 在物联网这一方面ESP8266还是特别实用的 材料准备 淘宝 xff0
  • nvm安装流程

    nvm nvm是管理node版本的工具 一般我们会负责多个项目 xff0c 不同项目有不同版本的node环境 xff0c 此时就需要nvm对node版本进行切换处理 1 首先卸载node 2 nvm下载 安装包下载地址 xff1a http
  • 树莓派 raspbian (各版本)换国内源

    xff08 看到师兄的博客后感觉还行 xff0c 所以自己也来写下 xff0c 第一次写 xff0c 所以不会编排 xff0c 有什么错误希望被指出 xff0c 谢谢 xff09 相信来寻找换源的人都和一样知道为什么要换国内更新源了吧 xf

随机推荐

  • 树莓派4b的i2c配置及wiringPi通信

    一 配置i2c设备 1 xff09 在终端中操作 xff0c 输入指令 sudo raspi config 2 xff09 然后会出现设置界面 xff0c 然后跟着如下图片操作 第一项 xff1a Change User Password
  • 树莓派驱动之设备树覆盖

    一 前言 由于是初学者 xff0c 所以对于一些操作需要记录下方便自己查找 附上 xff1a 树莓派设备树官网 我只从官网上了解到一点点内容 xff0c 还有许多没看懂的和还没学的 一个常规的Arm Linux设备树 xff0c 主要是由源
  • ConcurrentHashMap 常用方法

    void clear 从该映射中移除所有映射关系 boolean containsKey Object key 测试指定对象是否为此表中的键 boolean containsValue Object value 如果此映射将一个或多个键映射
  • .vscode中常用的配置文件

    文件 一 安装常用插件二 c cpp properties json文件三 settings json文件 一 安装常用插件 根据自己需要安装相应的插件 xff1a span class token number 1 span span c
  • 操作系统相关知识

    目录 一 嵌入式操作系统二 实时操作系统 xff08 RTOS xff09 三 Freertos 操作系统四 Linux xff08 操作系统 xff09 五 Linux 和 FreeRTOS操作系统的区别 xff08 面试中被问到 xff
  • 结构体对齐(全)

    目录 一 结构体对齐规则二 结构体位域对齐规则 一 结构体对齐规则 1 第一个成员在与结构体偏移量为0的地址处 xff1b 2 其他成员变量要与自身类型的整数倍地址处对齐 xff1b 3 结构体总大小为要与 处理器字节数与成员类型所占字节数
  • C语言自我实现模块化打印log

    在一个嵌入式稍微大些的工程中实现模块化控制打印输出信息是很有必要的 xff0c 下面是模仿别人的实现的模块化打印 xff0c 需要时可以根据下面的实现代码去修改满足自己所需要的 xff01 xff01 xff01 span class to
  • 卸载ibus后无法进入桌面的解决方法

    过程 一 复现现象 xff1a 二 复现原因 xff1a 三 解决方法 xff1a 重新安装ubuntu桌面 一 复现现象 xff1a 开机进入 Ubuntu xff0c 输入密码成功后一直卡在这个页面 xff0c 无法进入 ubuntu
  • Linux内核之 printk 打印

    Linux内核之 printk 打印 前言一 printk 介绍1 printk 消息级别2 内核 printk 文件 二 调整打印级别1 在 menuconfig 中修改2 在系统中修改 xff08 常用 xff09 三 使用示例四 查看
  • Linux ALSA 之四:Tinyalsa->Alsa Driver Flow分析

    Tinyalsa gt Alsa Driver Flow 一 概述二 Tinyalsa2 1 tinypcminfo2 2 tinymix2 3 tinyplay2 4 tinycap 三 Tinyalsa gt alsa driver f
  • Linux ALSA 之十:ALSA ASOC Machine Driver

    ALSA ASOC Machine Driver 一 Machine 简介二 ASoC Machine Driver2 1 Machine Driver 的 Platform Driver amp Platform Device 驱动模型2
  • Linux ALSA 之十一:ALSA ASOC Path 完整路径追踪

    ALSA ASOC Path 完整路径追踪 一 ASoc Path 简介二 ASoc Path 完整路径2 1 tinymix 设置2 2 完整路径 route 一 ASoc Path 简介 如前面小节所描述 xff0c ASoc 中 Ma
  • 【STM32】关于Clion+STM32cubeMX环境搭建过程中所遇到的一些问题·其一

    目录 一 前言 二 正文 stm32 cubemx的安装 建立工程 配置openOCD进行编译烧录 关于烧录失败的事 三 小结 四 参考文章 一 前言 近日在网上冲浪时无意间发现了稚晖君在知乎发布的一篇关于如何使用clion 43 stm3
  • 端口扫描 1

    TCP端口扫描是通过SYN数据包进行的 xff0c 用于扫描目标机器的端口上是否存在程序监听 xff0c 通常意义上 xff0c 普通个人机器上的某个端口如果有程序监听的话 xff0c 那么它一般是系统漏洞 由于TCP是一个有连接的可靠协议
  • linux Ubuntu终端快捷键

    终端操作快捷键 Tab 自动补全 Ctrl 43 a 光标移动到开始位置 Ctrl 43 e 光标移动到最末尾 Ctrl 43 k 删除此处至末尾的所有内容 Ctrl 43 u 删除此处至开始的所有内容 Ctrl 43 d 删除当前字符 C
  • Linux ALSA 之十二:ALSA ASOC Kcontrol

    ALSA ASOC Kcontrol 一 结构体 snd kcontrol new二 ASoC 系统定义的 kcontrol 宏2 1 SOC SINGLE2 2 SOC SINGLE TLV2 3 SOC DOUBLE2 4 Mixer
  • (2022.12.12 )完成mavros配置+PX4配置

    一 mavros 安装配置 在安装之前 xff0c 请先更新软件库 xff1a sudo apt get update sudo apt get upgrade 遇到问题 无法安全地用该源进行更新 xff0c 所以默认禁用该源 N 参见 a
  • 基于ROS平台的STM32小车--汇总

    一切为了实现利用ros通过串口控制小车简单运动 基于ROS平台的STM32小车 4 上位机控制器 https blog csdn net weixin 39752599 article details 86552511 下载串口通信的ROS
  • Docker容器可视化

    文章目录 本地安装X11界面工具 添加参数创建容器测试容器尝试运行Matplotlib绘制柱状图 参考 Docker容器中运行程序 xff0c 有时候需要显示容器中的图像 xff0c 或在容器中运行一些图形界面的软件 调用摄像头等 xff0
  • 什么是枚举

    什么是枚举 简单来说 xff0c 枚举就是一个类有有限个确定的对象 有限个 就不用解释了 xff0c 如果说枚举有无限个对象 xff0c 那它和普通的类又有什么区别呢 xff1f 确定的 就是指枚举类的所有对象都是不可变的 这里我给个例子解