【Java中级】11章、枚举 - java引用数据类型,枚举介绍、快速入门,了解枚举类的基本使用方式【1】
文章内容:
- 自定义实现枚举
- enum关键字实现枚举
❤️内容涉及枚举的定义,快速入门,注意事项和小题巩固知识点
🌈 跟着B站一位老师学习的内部类内容,现写这篇文章为学习内部类的小伙伴提供思路支持,希望可以一起感受java的魅力,爱上java编程!!!
1、枚举
1.1介绍
1.1.1、介绍
枚举类【枚:一个一个 举:即把具体的对象一个一个列举出来的类就称为枚举类】
- 枚举对应英文(enumeration,简写:enum)
- 枚举是一组常量的集合[春、夏、秋、冬]
- 可以这里理解:枚举属于一种特殊的类,里面只包含一组有限的特定对象
- final + static不会导致类加载
- 不需要提供setXxx方法,因为枚举对象值通常为只读。
- 对每枚举 对象/属性 使用
final + static共同修饰,实现底层优化。 - 枚举对象名通常使用全部大写**,常量的命名规范。**
- 枚举对象根据需要,也可以有多个属性
枚举示例(未使用enum形式):

(此时的构造器使用private修饰,所以不能使用new的方法进行类的初始化,只能使用类名.静态属性/方法)
代码演示:
package com.fhsedu.enum_;
public class Enumeration02 {public static void main(String[] args) {//运行结果见下图System.out.println(Season.SPRING);System.out.println(Season.AUTUMN);System.out.println(Season.SUMMER);System.out.println(Season.WINTER);}
}
class Season{private String name;private String desc;public final static Season SPRING = new Season("春天","温暖");public final static Season SUMMER = new Season("夏天","炎热");public final static Season AUTUMN = new Season("秋天","凉爽");public final static Season WINTER = new Season("冬天","寒冷");//1、将构造器私有化,目的防止 直接 new//2、去掉setXxx方法,防止属性被修改//3、在Season 内部,直接创建固定的对象//4、优化:可以 加入 final修饰符private Season(String name,String desc) {this.name = name;this.desc = desc;}public String getName() {return name;}public String getDesc() {return desc;}@Overridepublic String toString() {return "Season{" +"name='" + name + '\'' +", desc='" + desc + '\'' +'}';}
}

1.1.2、enum关键字实现枚举
很多情况下,枚举类是不希望进行更改的,但是可以进行获取内容,所以枚举类中只有getXxx方法,没有setXxx方法
enum关键字实现枚举,快速入门
语法:
体会和自定义枚举的区别
- 使用普通方法
public final static Season SPRING = new Season("春天","温暖");public final static Season SUMMER = new Season("夏天","炎热");public final static Season AUTUMN = new Season("秋天","凉爽");public final static Season WINTER = new Season("冬天","寒冷");
- 使用枚举方法(有多个枚举使用逗号分隔(,)最后使用分号结尾(;))
SPRING("春天","温暖"), SUMMER("夏天","炎热"), AUTUMN("秋天","凉爽"), WINTER("冬天","寒冷");
枚举演示
enum Season03{//如果使用了enum 代替class//2、public static final Season SPRING =// new SPRING("春天","温暖");解读 常量名(实参列表)//3、如果有多个常量(对象) 使用 , 号间隔即可//4、如果使用enum 来实现枚举,要求将定义常量对象,写在前面SPRING("春天","温暖"), SUMMER("夏天","炎热"),AUTUMN("秋天","凉爽"), WINTER("冬天","寒冷");private String name;private String desc;//描述Season03(String name, String desc) {this.name = name;this.desc = desc;}public String getName() {return name;}public String getDesc() {return desc;}@Overridepublic String toString() {return "Season03{" +"name='" + name + '\'' +", desc='" + desc + '\'' +'}';}
}

1.2、快速入门
- 如果我们使用的是无参构造器,创建常量对象则可以省略
()
SPRING("春天","温暖"),
SUMMER("夏天","炎热"),
AUTUMN("秋天","凉爽"),
WINTER("冬天","寒冷"),WHAT;
private String name;
private String desc;//描述private Season03(){}
Season03(String name, String desc) {this.name = name;this.desc = desc;
}
1.3、enum注意事项
- 当我们使用enum 关键字开发一个枚举类时,默认会继承
Enum类,而且是一个final类,使用javap进行验证
- 传统的
public static final Season2 SPRING = new Season2("春天","温暖");简化成SPRING("春天","温暖"),这里必须知道,它调用了那个构造器。- 如果使用无参构造器 创建 枚举对象,则实参列表和小括号都可以省略
- 当有多个枚举对象时,使用 , 间隔,最后有一个分号结尾
- 枚举对象必须放在枚举类的行首
1.4、enum判断是否可行
判断下面的代码是否正确,并说明其含义

解答:
- 上面的语法是可以的
- 有一个枚举类Gender,没有属性
- 有两个枚举对象 BOY,GIRL,使用的无参构造器创建
下列代码输出的内容是什么?

enum的修饰为:public final static ....
package com.fhsedu.enum_;/*** @author fhs* @version 1.0*/
public class EnumerationExercise01 {public static void main(String[] args) {Gender2 boy = Gender2.BOY;//OKGender2 boy2 = Gender2.BOY;//OKSystem.out.println(boy);//BOY/*public String toString() {return name;}*/System.out.println(boy == boy2);//public final static}
}
enum Gender2{BOY,GIRL;
}

Enum中底层源代码:

1.5、Enum常用方法
了解Enum的一般常用方法

代码演示
package com.fhsedu;
@SuppressWarnings("all")
public class EnumDemo01 {public static void main(String[] args) {Season spring = Season.SPRING;System.out.println(spring);//SPRINGSystem.out.println(spring.name());//SPRINGSystem.out.println(spring.ordinal());//0Season[] values = Season.values();//枚举中的所有类型for (Season season : values) {//SPRING//SUMMERSystem.out.println(season);}Season summerValue = Season.valueOf("SUMMER");System.out.println(summerValue);//SUMMERSystem.out.println(spring.compareTo(summerValue));//-1 (spring的位置号 - summerValue的位置号)}
}enum Season {SPRING("春天", "温暖"),SUMMER("夏天", "炎热");private String name;private String describe;Season(String name, String describe) {this.name = name;this.describe = describe;}public String getName() {return name;}public String getDescribe() {return describe;}
}

对象.ordinal() —>输出对象的序号/编号

- valuesOf用法
//执行流程
//1、根据你输入的 "SPRING" 到 Season03的枚举对象去查找
//2、如果找到了,就返回,如果没有找到,就报错
Season03 spring1 = Season03.valueOf("SPRING");
System.out.println("spring = " + spring1);//对象信息
System.out.println(spring == spring1);//true
如果valueOf(“SPRING”)该对象中没有该信息,就会报错:

没有一个枚举常量
- CompareTo
System.out.println("====compareTo====");
//compareTo:比较两个枚举常量,比较的就是编号
//1、就是把 Season2.AUTUMN 枚举对象的编号和Season03.AUTUMN枚举对象的编号进行比较
//2、看看结果
/*
* public final int compareTo(E o) {
return self.ordinal - other.ordinal;}* Season03.SPRING的编号[0] - Season03.AUTUMN[2]的编号* */System.out.println(Season03.SPRING.compareTo(Season03.AUTUMN));//-2
所有方法:
package com.fhsedu.enum_;/*** @author fhs* @version 1.0*/
public class EnumMethod {public static void main(String[] args) {//使用Season03 枚举类,来演示各种方法Season03 spring = Season03.SPRING;//输出枚举对象的名字System.out.println(spring.getName());//春天//ordinal() 输出的是该枚举对象的次序/编号 ,从0开始//SPRING 枚举对象是第一个,因此输出0System.out.println(spring.ordinal());//0//从反编译可以看出 values 方法 返回Season03[]//含有定义的所有枚举对象System.out.println(spring.values());System.out.println("====valuesOf====");//valueOf:将字符串转换成枚举对象,要求字符串必须为己有的常量名,否则会报异常//执行流程//1、根据你输入的 "SPRING" 到 Season03的枚举对象去查找//2、如果找到了,就返回,如果没有找到,就报错Season03 spring1 = Season03.valueOf("SPRING");//Season03中找不到就会报错// Season03 season031 = Season03.valueOf("FHS");System.out.println("spring = " + spring1);//对象信息System.out.println(spring == spring1);//trueSystem.out.println("====compareTo====");//compareTo:比较两个枚举常量,比较的就是编号//1、就是把 Season2.AUTUMN 枚举对象的编号和Season03.AUTUMN枚举对象的编号进行比较//2、看看结果/** public final int compareTo(E o) {return self.ordinal - other.ordinal;}* Season03.SPRING的编号[0] - Season03.AUTUMN[2]的编号* */System.out.println(Season03.SPRING.compareTo(Season03.AUTUMN));//-2Season03[] season03s = Season03.values();System.out.println("----遍历取出枚举对象(增强for)----");for (Season03 season03 : season03s) {//增强for循循环System.out.println(season03);}/*for (Season03 season03 : season03s) {//快捷键 season03.for}*/}
}
1.6、enum实现星期打印

package com.fhsedu.enum_;public class EnumExercise01 {public static void main(String[] args) {//获取所有的枚举内容Week[] weeks = Week.values();System.out.println("====所有星期的信息如下====");for (Week week : weeks) {//将所有的枚举信息输出出来System.out.println(week.getDay());}}
}enum Week {//定义Week的枚举对象MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三"),THURSDAY("星期四"),FRIDAY("星期五"),SATURDAY("星期六"),SUNDAY("星期日");private String day;private Week(String day) {this.day = day;}public String getDay() {return day;}
}

1.7、enum实现接口
- enum不能继承其他类

- 使用enum关键字后,就不能再继承其他类了,因为enum会隐式继承Enum,而java是单继承机制
- 枚举类和普通类一样,可以实现接口,如下形式:
enum 类名 implements 接口1,接口2{}
package com.fhsedu.enum_;/*** @author fhs* @version 1.0*/
public class EnumDetail {public static void main(String[] args) {Music.CLASSMUSIC.playing();}
}
//1、enum实现的枚举类,仍然是一个类,所以还是可以实现接口的
interface IPlaying {public void playing();
}
//2、enum本身继承了Enum类,所以不能继承其他类了
enum Music implements IPlaying {CLASSMUSIC();@Overridepublic void playing() {System.out.println("播放好听的音乐....");}
}

相关文章:
【Java中级】11章、枚举 - java引用数据类型,枚举介绍、快速入门,了解枚举类的基本使用方式【1】
文章内容: 自定义实现枚举enum关键字实现枚举 ❤️内容涉及枚举的定义,快速入门,注意事项和小题巩固知识点 🌈 跟着B站一位老师学习的内部类内容,现写这篇文章为学习内部类的小伙伴提供思路支持,希望可以一…...
Jmeter 插件【性能测试监控搭建】
1. 安装Plugins Manager 1.1 下载路径: Install :: JMeter-Plugins.org 1.2 放在lib/ext目录下 1.3 重启Jmeter,会在菜单-选项下多一个 Plugins Manager菜单,打开即可对插件进行安装、升级。 2. 客户端(Jmeter端) 2.1 安装plugins manager…...
【ES系列】Elasticsearch从入门到精通保姆级教程 | 启篇
🔥 本系列将带你从零开始学习Elasticsearch,通过保姆级教程,手把手教你掌握这个强大的搜索与分析引擎。无论你是完全的新手,还是想系统学习ES的开发者,这个系列都能满足你的需求。 📚博主匠心之作,强推专栏: JAVA集合专栏 【夜话集】JVM知识专栏数据库sql理论与实战【…...
python内置标准模块--OS
内置标准模块–OS 在 Python 中,os 是一个内置标准模块,全称是 Operating System(操作系统)。它的核心作用是与当前操作系统交互,提供对文件系统、进程管理、环境变量等操作系统功能的访问接口 1. os 模块的核心功…...
大模型的6种设计模式
大模型的六种设计模式 目录 1. 链式思考模式 (Chain-of-Thought, CoT)2. ReAct模式 (Reasoning and Acting)3. 自洽性模式 (Self-Consistency)4. 代理模式 (Agent)5. 检索增强生成 (RAG - Retrieval Augmented Generation)6. 提示工程模式 (Prompt Engineering Patterns)总结…...
大模型的输出:温度对输出的影响
大模型的输出:温度对输出的影响 温度T 在大模型(如人工智能语言模型)中,“温度”(Temperature)是一个重要的参数,用于控制模型生成文本的随机性和多样性。它通常用于调整模型输出的概率分布&a…...
Unity中Spine骨骼动画完全指南:从API详解到避坑实战
Unity中Spine骨骼动画完全指南:从API详解到避坑实战 一、为什么要选择Spine? Spine作为专业的2D骨骼动画工具,相比传统帧动画可节省90%资源量。在Unity中的典型应用场景包括: 角色换装系统(通过插槽替换部件)复杂连招系统(动画混合与过渡)动态表情系统(面部骨骼控制)…...
汇丰eee2
聚合和继承有什么样的优点和区别,什么时候决定用,现实开发中,选择哪一种去使用? 聚合的优点: 灵活性: 聚合是一种弱耦合关系,被聚合对象可以独立存在,可以灵活地替换或修改被聚合对…...
C++Cherno 学习笔记day17 [66]-[70] 类型双关、联合体、虚析构函数、类型转换、条件与操作断点
b站Cherno的课[66]-[70] 一、C的类型双关二、C的union(联合体、共用体)三、C的虚析构函数四、C的类型转换五、条件与操作断点——VisualStudio小技巧 一、C的类型双关 作用:在C中绕过类型系统 C是强类型语言 有一个类型系统,不…...
wordpress 利用 All-in-One WP Migration全站转移
导出导入站点 在插件中查询 All-in-One WP Migration备份并导出全站数据 导入 注意事项: 1.导入部分限制50MB 宝塔解决方案,其他类似,修改php.ini配置文件即可 2. 全站转移需要修改域名 3. 大文件版本,大于1G的可以参考我的…...
springboot+easyexcel实现下载excels模板下拉选择
定义下拉注解 Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) public interface ExcelDropDown {/*** 固定下拉选项*/String[] source() default {};/*** 动态数据源key(从上下文中获取)*/String sourceMethod() default "";…...
LeetCode.3396.使数组元素互不相同所需的最少操作次数
3396. 使数组元素互不相同所需的最少操作次数 给你一个整数数组 nums,你需要确保数组中的元素 互不相同 。为此,你可以执行以下操作任意次: 从数组的开头移除 3 个元素。如果数组中元素少于 3 个,则移除所有剩余元素。 注意&…...
【工具使用】在OpenBMC中使用GDB工具来定位coredump原因
在OpenBMC调试中,有时会产生coredump却不知道从哪里入手分析,GDB工具就可以提供帮助。 1 编译带GDB工具的镜像 OpenBMC镜像中默认没有加入GDB工具,因此首先需要编译一个带GDB工具的OpenBMC镜像用于调试。在recipes-phosphor/packagegroups/…...
Linux系统(Ubuntu和树莓派)的远程操作练习
文章目录 一、实验一(一)实验准备(二)Ubuntu 下的远程操作(三)树莓派下的远程操作(四)思考 二、实验二1.talk程序2. C 编写 Linux 进程间通信(IPC)聊天程序 一…...
雪花算法、md5加密
雪花算法生成ID是一个64位长整型(但是也可以通过优化简短位数) 组成部分: 时间戳 机器ID 序列号 用途: 分布式系统唯一ID生成:解决数据库自增ID在分布式环境下的唯一性问题、避免UUID的无序性和性能问题 有序性…...
《P2660 zzc 种田》
题目背景 可能以后 zzc 就去种田了。 题目描述 田地是一个巨大的矩形,然而 zzc 每次只能种一个正方形,而每种一个正方形时 zzc 所花的体力值是正方形的周长,种过的田不可以再种,zzc 很懒还要节约体力去泡妹子,想花最少的体力值…...
高效创建工作流,可实现类似unreal engine的蓝图效果,内部使用多线程高效执行节点函数
文章目录 前言(Introduction)开发环境搭建(Development environment setup)运行(Run test)开发者(Developer)编译(Compile)报错 前言(Introductio…...
Design Compiler:语法检查工具dcprocheck
相关阅读 Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482 dcprocheck是一个在Design Compiler存在于安装目录下的程序(其实它是一个指向snps_shell的符号链接,但snps_shell可以根据启动命令名判…...
aws(学习笔记第三十八课) codepipeline-build-deploy-github-manual
文章目录 aws(学习笔记第三十八课) codepipeline-build-deploy-github-manual学习内容:1. 整体架构1.1 代码链接1.2 全体处理架构 2. 代码分析2.1 创建ImageRepo,并设定给FargateTaskDef2.2 创建CodeBuild project2.3 对CodeBuild project赋予权限&#…...
自定义实现C++拓展pytorch功能
ncrelu.cpp #include <torch/extension.h> // 头文件引用部分namespace py pybind11;torch::Tensor ncrelu_forward(torch::Tensor input) {auto pos input.clamp_min(0); // 具体实现部分auto neg input.clamp_max(0);return torch::cat({pos, neg}, …...
深度学习|注意力机制
一、注意力提示 随意:跟随主观意识,也就是指有意识。 注意力机制:考虑“随意线索”,有一个注意力池化层,将会最终选择考虑到“随意线索”的那个值 二、注意力汇聚 这一部分也就是讲第一大点中“注意力汇聚”那个池化…...
京东店铺托管7*16小时全时护航
内容概要 京东店铺托管服务的*716小时全时护航模式,相当于给商家配了个全年无休的"运营管家"。专业团队每天从早7点到晚11点实时盯着运营数据和商品排名,连半夜流量波动都能通过智能系统秒级预警。这种全天候服务可不是单纯拼人力——系统自动…...
遵循IEC62304YY/T0664:确保医疗器械软件生命周期合规性
一、EC 62304与YY/T 0664的核心定位与关系 IEC 62304(IEC 62304)是国际通用的医疗器械软件生命周期管理标准,适用于所有包含软件的医疗器械(如嵌入式软件、独立软件、移动应用等),其核心目标是确保软件的安…...
Android Input——输入系统介绍(一)
Input 是 Android 系统中的一个重要模块,它是负责处理用户输入操作的核心组件。该系统从各种输入设备(如触摸屏、键盘、鼠标等)获取原始输入事件,并将其转换为 Android 应用可以理解和消费的 KeyEvent 或 MotionEvent 对象。 一、…...
20250408-报错:pre_state = state同更新现象
项目场景: 基于强化学习解决组合优化问题 问题描述 # POMO Rolloutstate, reward, done self.env.pre_step()# next_state statewith autocast():while not done:# 执行动作并获取新状态和奖励selected, prob self.model(state)# 更新状态:因为self.env.step(s…...
如何在服务器里部署辅助域
辅助域(Additional Domain Controller,ADC)是指在现有的Active Directory(活动目录)架构中,新增一个或多个域控制器以提高目录服务的可用性和可靠性。以下是辅助域的定义、功能和应用场景的详细说明&#x…...
WPS JS宏编程教程(从基础到进阶)-- 第五部分:JS数组与WPS结合应用
目录 摘要第5章 JS数组与WPS结合应用5-1 JS数组的核心特性核心特性解析5-2 数组的两种创建方式(字面量与扩展操作符)1. 字面量创建2. 扩展操作符创建5-3 数组创建应用:提取字符串中的数字需求说明代码实现5-4 用函数创建数组(new Array、Array.of、Array.from)1. new Arra…...
Kaggle-Housing Prices-(回归预测+Ridge,Lasso,Xgboost模型融合)
Housing Prices 题意: 给出房子的各种特性,让你预测如今房子的价格。 思考: 数据处理: 1.用plt查看散点图,选择对价格影响高的特征值:YearBuilt,YearRemodAdd,GarageYrBlt。但是…...
C语言:32位数据转换为floaf解析
在C语言中,将接收到的32位数据(通常是一个unsigned int或int类型)转换为float类型可以通过以下方式实现: 除了下面的方法外还有几个方法,参考博客: C语言:把两个16位的数据合成32位浮点型数据 …...
MQTT协议:IoT通信的轻量级选手
文章总结(帮你们节约时间) MQTT协议是一种轻量级的发布/订阅通信协议。MQTT通信包括连接建立、订阅、发布和断开等过程。MQTT基于TCP/IP,其通信过程涉及多种控制包和数据包。ESP32S3可以通过MQTT协议接收消息来控制IO9引脚上的LED。 想象一…...



