一分钟彻底掌握Java枚举

在Java编程语言中,枚举(Enum)是一种特殊的类,它包含了一组固定的常量。枚举常用于表示固定数量的常量值,例如一周的七天、四个基本方向(东、南、西、北)等。

0.浅显理解

枚举就像是一个特殊的“菜单”,它列出了一系列特定的、预定义的选项。在编程中,这些选项都是独一无二的,并且一旦定义好就不能改变。比如,你想定义一个表示一周七天的“菜单”,那么你就可以使用枚举来列出“星期一”、“星期二”…直到“星期日”。每个选项都是这个“菜单”的一部分,并且只能选择其中的一个。这样,你的代码就更加清晰、安全,因为你知道只能选择这个“菜单”上的选项,而不能随意输入其他内容。
所有的枚举值都是 public static final 的。

1. 枚举的基本使用

定义一个枚举类型非常简单,只需要使用enum关键字,并列出所有可能的常量值。下面是一个表示一周七天的枚举示例:

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

你可以像使用普通类一样使用枚举。例如,你可以创建一个枚举的实例并赋值给变量:

Weekday today = Weekday.WEDNESDAY;

2. 枚举的方法

虽然枚举类型在定义时通常只包含常量,但你也可以为枚举类型添加方法。这些方法可以是实例方法,也可以是静态方法。

实例方法

每个枚举常量都可以有自己的实例方法。下面是一个带有实例方法的枚举示例:

public enum Color {RED("红色"), GREEN("绿色"), BLUE("蓝色");private final String chineseName;Color(String chineseName) {this.chineseName = chineseName;}public String getChineseName() {return chineseName;}
}

在这个例子中,我们为Color枚举添加了一个构造函数和一个实例方法getChineseName()。每个枚举常量在创建时都会调用构造函数,并传递一个中文名字作为参数。

静态方法

枚举类型也可以包含静态方法。静态方法通常用于实现一些与枚举常量集相关的通用功能。下面是一个带有静态方法的枚举示例:

public enum Operation {PLUS {@Overridedouble apply(double x, double y) {return x + y;}},MINUS {@Overridedouble apply(double x, double y) {return x - y;}};// 抽象方法abstract double apply(double x, double y);// 静态方法public static double evaluate(String op, double x, double y) {for (Operation operation : Operation.values()) {if (operation.name().equalsIgnoreCase(op)) {return operation.apply(x, y);}}throw new IllegalArgumentException("Invalid operation: " + op);}
}

在这个例子中,我们定义了一个名为Operation的枚举类型,它包含两个枚举常量:PLUSMINUS。这两个常量都实现了一个名为apply的抽象方法,该方法接受两个double类型的参数并返回一个double类型的结果。我们还为Operation枚举添加了一个名为evaluate的静态方法,该方法接受一个操作符字符串和两个double类型的参数,并返回相应的计算结果。

3. 枚举的用途

枚举类型在Java编程中有许多用途。以下是一些常见的用途:

  • 表示固定数量的常量值:如上所述,枚举类型最常用于表示一组固定的常量值。
  • 提高代码的可读性和可维护性:使用枚举类型可以使代码更加清晰、易于理解。与使用常量字符串或整数相比,使用枚举类型可以减少错误并提高代码的可维护性。
  • 实现单例模式:枚举类型在Java中是实现单例模式的最佳方式之一。由于枚举类型的实例在JVM中是唯一的,因此可以通过声明一个枚举类型的实例来实现单例模式。
  • 类型安全:使用枚举类型可以确保在编译时检查类型安全。与使用常量字符串或整数相比,使用枚举类型可以减少因类型不匹配而导致的运行时错误。
  • 实现策略模式:在策略模式中,可以使用枚举类型来表示不同的算法或行为。每个枚举常量都可以实现一个接口或抽象方法,并在需要时调用相应的方法来实现不同的算法或行为。

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

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

相关文章

STM32 SWD烧写

最小电路 stm32f103x 内部已经集成了振荡电路,可以省略;rst引脚电路,可以省略,boot0,boot1不需要设置 正常烧录 -------------------------------------------------------------------STM32CubeProgrammer v2.9.0 …

使用 go-control-plane 自定义服务网格控制面

写在前面 阅读本文需要最起码了解envoy相关的概念 本文只是一个类似于demo的测试,只为了学习istio,更好的理解istio中的控制面和数据面(pilot -> proxy)是如何交互的,下图的蓝色虚线 先说go-control-plane是什么…

nginx 1024 worker_connections are not enough while connecting to upstream

现象 请求api响应慢,甚至出现504 gateway timeout,重启后端服务不能恢复,但重启nginx可以恢复。 解决方案 worker_connections使用了默认值 1024,当流量增长时,导致连接不够 在nginx.conf中修改连接数就可以了&…

小白学python(第四天)顺序与分支篇

这几天因为个人原因,python篇会更新比较慢,还望大家谅解,那么废话不多说,我们现在就进入正题 顺序篇 这个没啥好说的,就是自上而下,依次执行 分支篇 条件(if)语句语法格式&#…

【车载开发系列】瑞萨RH850单片机入门

【车载开发系列】瑞萨RH850单片机入门 【车载开发系列】瑞萨RH850单片机入门 【车载开发系列】瑞萨RH850单片机入门一. 瑞萨RH850概念二. 瑞萨RH850分类三. 瑞萨RH850的应用领域四. RH850和ARM的区别五. RH850内存概念1. Flash存储器2. RAM(随机访问存储器&#xff…

【C++】————string基础用法及部分函数底层实现

作者主页: 作者主页 本篇博客专栏:C 创作时间 :2024年6月30日 前言: 本文主要介绍STL容器之一 ---- string,在学习C的过程中,我们要将C视为一个语言联邦(摘录于Effective C 条款一&#x…

实验6 形态学图像处理

1. 实验目的 ①掌握数字图像处理中,形态学方法的基本思想; ②掌握膨胀、腐蚀、开运算、闭运算等形态学基本运算方法; ③能够利用形态学基本运算方法,编程实现图像去噪,边界提取等功能。 2. 实验内容 ①调用Matlab /…

C语言 统计字符类型个数

这个程序读取用户输入的一行字符&#xff0c;并统计其中的英文字母、空格、数字和其他字符的个数。 #include <stdio.h> #include <ctype.h>int main() {char ch;int letters 0, spaces 0, digits 0, others 0;printf("输入一行字符: ");// 逐字符读…

PMBOK® 第六版 结束项目或阶段

目录 读后感—PMBOK第六版 目录 不论是阶段的收尾还是项目整体的收尾&#xff0c;都应是令人振奋的事。然而&#xff0c;在实际生活中&#xff0c;收尾工作却相当艰难。会遭遇负责人调离、换任&#xff0c;导致不再需要已购产品&#xff1b;项目收尾时对照招标文件或合同&…

51-61 CVPR 2024 最佳论文 | Rich Human Feedback for Text-to-Image Generation

23年12月&#xff0c;加州大学圣地亚哥、谷歌研究院、南加州大学、剑桥大学联合发布Rich Human Feedback for Text-to-Image Generation论文。 作者受大模型中RLHF技术的启发&#xff0c;用人类反馈来改进Stable Diffusion等文生图模型&#xff0c;提出了先进的RichHF-18K数据…

足球虚拟越位线技术FIFA OT(一)

此系列文章用于记录和回顾开发越位线系统的过程&#xff0c;平时工作较忙&#xff0c;有空时更新。 越位线技术 越位技术已被用于图形化分析足球中潜在的越位情况。 自 2018 年将视频助理裁判 &#xff08;VAR&#xff09; 引入比赛规则以来&#xff0c;人们越来越关注准确确…

完美世界|单机版合集(共22个版本)

前言 我是研究单机的老罗&#xff0c;今天给大家带来的是完美世界的单机版合集&#xff0c;一共22个版本。本人亲自测试了一个版本&#xff0c;运行视频如下&#xff1a; 完美世界|单机版合集 先看所有的版本的文件&#xff0c;文件比较大&#xff0c;准备好空间&#xff0c;差…

C#高级语法之特性

自定义特性和使用 什么是特性 特性&#xff08;attribute&#xff09;是一种允许我们向程序的程序集增加元数据的语言结构&#xff0c;它是用于保存程序结构信息的某种特殊类型的类。 将应用了特性的程序结构叫做目标设计用来获取和使用元数据的程序&#xff08;对象浏览器&a…

Transformer详解encoder

目录 1. Input Embedding 2. Positional Encoding 3. Multi-Head Attention 4. Add & Norm 5. Feedforward Add & Norm 6.代码展示 &#xff08;1&#xff09;layer_norm &#xff08;2&#xff09;encoder_layer1 最近刚好梳理了下transformer&#xff0c;今…

【VScode】常用配置

1.indenticator 增加白色竖条&#xff0c;显示方法范围 2.Git Graph 给git变换分支增添颜色区分 3.Vue 系列 vue 系列&#xff1a;给纯白色代码添加 颜色区分 3.eslint eslint警告&#xff0c;比如{ } 只写了半个会标红提示错误 等错误信息提示 需要配置js等页面 非下…

1.linux操作系统CPU负载

目录 概述CPU平均负载查看平均负载结束 概述 CPU 使用率 和CPU 平均使用率。 CPU平均负载 单位时间内系统处于 [可运行状态] 和 [不可中断状态] 的平均进程数&#xff0c;就是平均活跃进程数&#xff0c;和CPU使用率并没有直接关系 可运行状态 正在使用CPU或者正等待CPU的进…

【Elasticsearch】linux使用supervisor常驻Elasticsearch,centos6.10安装 supervisor

背景&#xff1a; linux服务器&#xff0c;CentOS 6操作系统&#xff0c;默认版本python2.6.6&#xff0c;避免安装过多的依赖不升级python 在网上查的资料python2.6.6兼容supervisor版本 3.1.3 安装supervisor 手动在python官网下载supervisor&#xff0c;并上传到服务器 下…

量化交易心法——如何建立自己的算法交易事业

量化交易,也称算法交易,是严格按照将计算机算法程序给出的买卖决策进行的证券交易。 一、 什么人适合成为量化交易员 做量化交易并不一定需要特别高的学历,只要具备一定的金融学以及统计学知识,有一定的经济基础,不需要用交易的收益来维持日常生活,因为并不是很快就能找…

Linux_动、静态库

目录 一、静态库 1、静态库的概念 2、制作静态库的指令 3、制作静态库 4、链接静态库 二、动态库 1、动态库的概念 2、制作动态库的指令 3、制作动态库 4、链接动态库 5、动态库的加载 三、静态库与动态库的区别 结语 前言&#xff1a; 在Linux下大部分程序进…

第2章 数据存储篇

目录 2.1 MongoDB&#xff1a;面向文档的灵活存储 2.1.1 MongoDB基础与架构 2.1.1.1基本概念 2.1.1.2MongoDB安装与配置 1&#xff09;安装MongoDB-Linux安装示例&#xff08;以Ubuntu为例&#xff09; 2&#xff09;更新包列表并安装MongoDB 3&#xff09;启动MongoDB服…