【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.hqwc.cn/news/258721.html

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

相关文章

Java Spring + SpringMVC + MyBatis(SSM)期末作业项目

本系统是一个图书管理系统,比较适合当作期末作业主要技术栈如下: - 数据库:MySQL - 开发工具:IDEA - 数据连接池:Druid - Web容器:Apache Tomcat - 项目管理工具:Maven - 版本控制工具&#xf…

编译和使用WPS-ghrsst-to-intermediate生成SST

一、下载 V1.0 https://github.com/bbrashers/WPS-ghrsst-to-intermediate/tree/masterV1.5(使用过程报错,原因不详,能正常使用的麻烦告知一下方法) https://github.com/dmitryale/WPS-ghrsst-to-intermediate二、修改makefile…

大名鼎鼎的CleanMyMac X软件值不值得下载?

今天给大家推荐大名鼎鼎的Clean My Mac X(以下简称CMM X),它是Mac上一款美观易用的系统优化清理工具,也是小编刚开始用Mac时的装机必备。它能够清理系统垃圾,提升电脑的运行速度,卸载许久不用的软件&#x…

Oracle的错误信息帮助:Error Help

今天看手册时,发现上面有个提示: Error messages are now available in Error Help. 点击 View Error Help,显示如下,其实就是oerr命令的图形化版本: 点击Database Error Message Index,以下界面等同于命令…

甘草书店:#10 2023年11月24日 星期五 「麦田创业分享2—世界奇奇怪怪,请保持可可爱爱」

今日继续分享麦田创业经验。 如果你问我,创业过程中是否想过放弃。那么答案是,有那么一次。 那时想要放弃的原因并不是辛苦没有回报,或是资金短缺,而是没能理解“异见者”。 其实事情非常简单,现在反观那时的自己&a…

巧用静默,原来真的可以告警零误报!

前言 在当今的信息技术环境中,系统的稳定性和安全性至关重要。然而,在进行计划内的升级维护时,监控系统往往会产生大量的误报警告,给运维人员带来不必要的困扰。为了解决这一问题,组织可以通过合理设置静默规则&#…

Springboot内置Tomcat线程数优化

Springboot内置Tomcat线程数优化 # 等待队列长度,默认100。队列也做缓冲池用,但也不能无限长,不但消耗内存,而且出队入队也消耗CPU server.tomcat.accept-count1000 # 最大工作线程数,默认200。(4核8g内存…

Windows下使用CMD修改本地IP

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

人工智能从 DeepMind 到 ChatGPT ,从 2012 - 2024

本心、输入输出、结果 文章目录 人工智能从 DeepMind 到 ChatGPT ,从 2012 - 2024前言2010年:DeepMind诞生2012~2013年:谷歌重视AI发展,“拿下”Hinton2013~2014年:谷歌收购DeepMind2013年&…

Git的介绍和下载安装

Git的介绍和下载安装 概述 Git是一个分布式版本控制工具, 通常用来管理项目中的源代码文件(Java类、xml文件、html页面等)进行管理,在软件开发过程中被广泛使用 Git可以记录文件修改的历史记录并形成备份从而实现代码回溯, 版本切换, 多人协作, 远程备份的功能Git具有廉价的…

云上巴蜀丨云轴科技ZStack成功实践精选(川渝)

巴蜀——古政权必争之地 不仅拥有优越的战略位置 而且拥有丰富的自然资源,悠久的历史文化 如今的川渝经济、人口发展迅速 2023年前三季度,四川与重庆GDP增速均超过国家平均线,为6.5%为5.6% 川渝经济发展带动数字化发展浪潮 云轴科技ZSt…

《opencv实用探索·十四》VideoCapture播放视频和视像头调用

1、VideoCapture播放视频 #include <opencv2/opencv.hpp> #include <iostream>using namespace std; using namespace cv;int main() {// 定义相关VideoCapture对象VideoCapture capture;// 打开视频文件capture.open("1.avi");// 判断视频流读取是否正…