目录

(四)面向对象:

12、枚举类:

(1)概述:

(2)枚举类的定义格式:

(3)编译与反编译:

(4)Enum类的特点:

(5)枚举类的测试类以及一些特有的方法:


(四)面向对象:

12、枚举类:
(1)概述:

 为什么要有枚举类:

1、类型安全,String类的color传入“1”也不会报错,但其实无意义;而enum是强类型,只能使用预定义的值。

2、语意清晰,代码可读性高

3、限定取值范围,避免非法值。   

    定义:是一种特殊得类,通过enum关键字定义。

(2)枚举类的定义格式:
[修饰符] enum 枚举类名 {
                 枚举元素1,枚举元素2,...枚举元素n;
        枚举元素必须写在第一行,如果有多个的话,用逗号','隔开,最后用分号';'结束 ,如果';'后面没有其他内容的话,';'可以省略,但不建议省略

        

        枚举元素和枚举元素()效果一样,含义为:执行枚举类默认构造器去实例化枚举元素对象

Gender g1 = Gender.Male;
//Male() : Male = new Gender();

        枚举元素本质上是枚举类对象,由static与final修饰。

                [修饰符] 数据类型 数据成员名;

                [修饰符] 数据类型 数据成员方法(){……}

枚举类可以由普通数据成员(方法与属性)

                private 构造方法();

                private 构造方法(参数){……}

构造方法必须私有化

不自定义是,系统提供无参构造

枚举元素那里如果调用,必须定义

               [修饰符] static 返回值 成员方法名(){……}

                [修饰符] static 返回值 成员属性名;

枚举类中可以由静态方法与属性

}

以上是没有抽象方法的枚举类的定义格式,从上也可以看出,枚举类中可以由普通成员,构造方法,静态成员。

下面我们展示案例:

//枚举类基本定义
enum Week {//枚举元素必须写在第一行,如果有多个的话,用逗号','隔开,//最后用分号';'结束//如果';'后面没有其他内容的话,';'可以省略,但不建议省略MON, TUE, WED; //WED()//WED和WED()效果一样,含义为:执行枚举类默认构造器去实例化枚举元素对象//源代码类似:public static final Week WED = new Week();//注意:用户没有提供构造器,系统会提供默认的构造器 private Week(){}//枚举类数据成员和成员方法,可以包含一个或多个private String desc;public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}//枚举类构造方法,如果不提供,系统会提供默认构造方法,private修饰//如果用户自定义枚举类构造方法,则系统不再提供private Week2() {}//自定义枚举方法,注意必须用private修饰private Week2(String desc) {this.desc = desc;}
}

接下来是含有抽象方法的枚举类的定义:

[修饰符]  enum 枚举类名{

        枚举元素1(根据构造方法传实参){

                重写该类所有的抽象方法;

        },枚举元素2(根据构造方法传实参){

                重写该类所有的抽象方法;

        },……枚举元素n(根据构造方法传实参){

                重写该类所有的抽象方法;

        };

理解:当我们定义了一个抽象方法,一般是有子类继承后重写,然后利用多态调用,但是我们的enum类是final修饰的类,无法被子类继承,那如何来重写抽象方法,这里我们想到了匿名内部类,我们可以在创建对象时通过匿名内部类来重写抽象方法,那我们又想到了枚举类的特殊性,创建的对象只能取预定义好的枚举元素那不能再创建对象时写匿名内部类,我们就只能在枚举类中创建枚举元素时,为枚举元素写匿名内部类。(枚举类可以理解为在类内部预定义对象,类外创建的对象只能等于这些预定义对象,那可以理解为实际上枚举元素就是对象。)

抽象方法不能私有,且每个枚举元素都必须重写所有的抽象方法。

        抽象方法声明;

}

案例展示:

enum Week3 {//注意:包含抽象方法的枚举类是抽象类,不能直接实例化对象//所以定义枚举类元素(所有)时候,一定要重写抽象方法//注意:必须在所有的枚举元素定义中,重写所有抽象方法//MON {MON() {//在枚举元素中重写抽象方法@Overridepublic void show() {System.out.println("in show, MON: 周一");}}, TUE("星期二") {//注意,每个枚举元素中都要重写重写方法,且要重写所有的抽象方法@Overridepublic void show() {System.out.println("in show, TUE: " +this.getDesc());}};//枚举类数据成员及get方法private String desc;public String getDesc() {return desc;}//枚举类自定义构造方法private Week3() {}private Week3(String desc) {this.desc = desc;}                                                                //枚举类 包含的 抽象方法(可以0或多个)public abstract void show();
}
(3)编译与反编译:

我们编写的enum类是不完整的,有很代码或者修饰符都被省略掉了

我们可以通过反编译去查看源码:

javap  enum类的字节码文件

但是这样获得的源码是隐藏了私有属性与方法的,如果想查看,则需要使用命令

javap -p enum类的字节码文件

从这里我们也可以看出来:

枚举类Gender本质上是一个final修饰的类,不可以被继承

枚举类会默认继承 java.lang.Enum 这个抽象泛型类

枚举元素,本质上是枚举类对象,且由 static和final 修饰

枚举类提供私有构造器,我们在类外不能主动创建枚举类对象

枚举类中可以包含 public static 静态方法

注意:包含抽象方法的enum类,不会被final修饰

(4)Enum类的特点:

<1>类由final修饰,不能被继承,但是final会隐身,反编译即可看到,包含抽象方法的enum类,不会被final修饰。

<2>枚举元素由final与static修饰,唯一且不能被修改,由类名直接调用

<3>枚举类设有非私有构造器,外界不能通过new创建对象

<4>可以包含静态方法

(5)枚举类的测试类以及一些特有的方法:

<1>对象的赋值只能是枚举元素:Gender g1 = Gender.MALE;

<2>输出枚举对象,默认输出枚举元素

<3>获取枚举元素名字的方法:g.name();

<4>获取枚举元素编号:g.ordinal();(返回int型);

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

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

相关文章

第二十一天-OLED显示实验

一、OLED显示原理1、OLED名词解释OLED可以自发光&#xff0c;无需背光光源。2、正点原子OLED模块模块总体概述模块接口模式选择MCU与模块外部连接8080并口读写过程OLED显存因为要进行显示&#xff0c;所以需要有显存。显存容量为128 x 8 byte&#xff0c;一个点用一位表示。SSD…

会议系统核心流程详解:创建、加入与消息交互

一、系统架构概览 会议系统采用"主进程线程池进程池"的分层架构&#xff0c;实现高并发与业务隔离&#xff1a; #mermaid-svg-fDJ5Ja5L3rqPkby0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-fDJ5Ja5L3r…

Spring 创建 Bean 的 8 种主要方式

Spring&#xff08;尤其是 Spring Boot&#xff09;提供了多种方式来让容器创建和管理 Bean。Component、Configuration Bean、EnableConfigurationProperties 都是常见方式。 下面我为你系统地梳理 Spring 创建 Bean 的所有主要方式&#xff0c;并说明它们的使用场景和区别。…

React 第七十节 Router中matchRoutes的使用详解及注意事项

前言 matchRoutes 是 React Router v6 提供的一个核心工具函数&#xff0c;主要用于匹配路由配置与当前路径。它在服务端渲染&#xff08;SSR&#xff09;、数据预加载、权限校验等场景中非常实用。下面详细解析其用法、注意事项和案例分析&#xff1a; 1、基本用法 import { m…

iSCSI服务配置全指南(含服务器与客户端)

iSCSI服务配置全指南&#xff08;含服务器与客户端&#xff09;一、iSCSI简介 1. 概念 互联网小型计算机系统接口&#xff08;Internet Small Computer System Interface&#xff0c;简称iSCSI&#xff09;是一种基于TCP/IP的协议&#xff0c;其核心功能是通过IP网络仿真SCSI高…

堆(Heap):高效的优先级队列实现

什么是堆&#xff1f;堆是一种特殊的完全二叉树&#xff0c;满足以下性质&#xff1a;堆序性&#xff1a;每个节点的值与其子节点满足特定关系最小堆&#xff1a;父节点 ≤ 子节点&#xff08;根最小&#xff09;最大堆&#xff1a;父节点 ≥ 子节点&#xff08;根最大&#xf…

朝花夕拾(四) --------python中的os库全指南

目录 Python os模块完全指南&#xff1a;从基础到高阶文件操作 1. 引言&#xff1a;为什么需要os模块&#xff1f; 1.1 os模块的重要性 1.2 适用场景 1.3 os模块的"瑞士军刀"特性 2. os模块基础功能 2.1 文件与目录操作 2.1.1 核心方法介绍 2.1.2 避坑指南 …

uniappx 安卓端本地打包的一些总结

本人之前没用过android studio&#xff0c;因为有打包到安卓端的需求&#xff0c;所以有了这篇文章。下面一些内容不正常工作&#xff0c;也不报错&#xff0c;是很烦的&#xff0c;根本不知道是哪里出了问题。比如对应的aar包没有引入。或者没有注册信息。 在实现过程中我遇到…

AUTOSAR进阶图解==>AUTOSAR_SWS_UDPNetworkManagement

AUTOSAR UDP网络管理详解 基于AUTOSAR标准的UDP网络管理模块架构分析与实现指南目录 1. 概述2. UDP网络管理架构 2.1 整体架构图2.2 架构组件详解 3. UDP网络管理状态机 3.1 状态机图3.2 状态详解 4. UDP网络管理操作序列 4.1 序列图4.2 操作流程详解 5. UDP网络管理配置模型 …

AI搜索引擎下的内容优化新范式:GEO的关键技术解析

摘要&#xff1a; 生成式AI搜索引擎的崛起&#xff0c;催生了GEO&#xff08;Generative Engine Optimization&#xff09;这一新的优化领域。本文将深入剖析GEO背后的关键技术&#xff0c;包括深度语义理解、结构化内容生成、以及AI算法的适配性&#xff0c;旨在为品牌在AI时代…

Java Lambda表达式是什么,怎么用

这种代码是什么&#xff0c;怎么阅读/*** 批量插入** param entityList ignore* param batchSize ignore* return ignore*/Transactional(rollbackFor Exception.class)Overridepublic boolean saveBatch(Collection<T> entityList, int batchSize) {String sqlStateme…

集成运算放大器(反向加法,减法)

反向加法电路原理&#xff1a;示波器显示&#xff1a;结论&#xff1a;输出电压-&#xff08;R4/R1*V1R4/R2*V2R4/R3*V3&#xff09;。平衡电阻R4等于R1和R2和R3的并联电压。减法运算电路原理&#xff1a;结论&#xff1a;减法运算电路分为三种不同情况&#xff0c;第一种情况为…

Maven入门到精通

目录 一&#xff0c;Maven概述 1.1介绍 1.2安装 1.3Maven生命周期和插件 1.4Maven的坐标的本地仓库的存储地址 二&#xff0c;依赖管理 2.1依赖管理——依赖范围 2.2依赖管理——添加依赖 获取依赖坐标 依赖添加后的操作 2.3依赖管理——依赖传递 2.4依赖管理——依…

计算机网络 TCP 延迟确认机制

TCP 延迟确认&#xff08;Delayed Acknowledgments&#xff0c;简称 Delayed ACK&#xff09;是 TCP 协议中一项旨在减少网络中小数据包数量、提升传输效率的优化机制。其核心思想是&#xff1a;不立即回复 ACK&#xff0c;而是等待一段时间&#xff08;通常 40ms&#xff09;&…

【visual studio】visual studio配置环境opencv和onnxruntime

下载opencv https://opencv.org/releases/?spma2ty_o01.29997173.0.0.57f4c921RELipW配置环境变量visual studio配置opencv 新建c项目选中文件后右键选择属性添加include文件夹库文件添加lib添加lib文件 将上一步的lib文件夹下的两个文件复制到这里以下两者区别在于&#xff0…

【Java】多线程Thread类

1. 进程与线程进程与线程的基本认识进程&#xff08;Process&#xff09;&#xff1a;进程是程序的一次动态执行过程&#xff0c;它经历了从代码加载、执行、到执行完毕的一个完整过程&#xff1b;同时也是并发执行的程序在执行过程中分配和管理资源的基本单位&#xff0c;竞争…

C/C++复习(四)

一.模版 模版涉及的是泛型编程&#xff0c;即通过编译器去确定类型的编程方式&#xff0c;模版分为&#xff1a;类模板和函数模版&#xff0c;下面我们一一复习&#xff1a; 函数模版&#xff1a; 格式&#xff1a; template<typename T1, typename T2,......,typename Tn&g…

022 基础 IO —— 文件

&#x1f984; 个人主页: 小米里的大麦-CSDN博客 &#x1f38f; 所属专栏: Linux_小米里的大麦的博客-CSDN博客 &#x1f381; GitHub主页: 小米里的大麦的 GitHub ⚙️ 操作环境: Visual Studio 2022 文章目录基础 IO —— C 语言文件 I/O 操作基础前言1. C 语言文件操作函数汇…

MNN LLM Chat iOS 流式输出优化实践

本文介绍了在 iOS 平台上使用 MNN 框架部署大语言模型&#xff08;LLM&#xff09;时&#xff0c;针对聊天应用中文字流式输出卡顿问题的优化实践。通过分析模型输出与 UI 更新不匹配、频繁刷新导致性能瓶颈以及缺乏视觉动画等问题&#xff0c;作者提出了一套包含智能流缓冲、U…

【开发技巧】VS2022+QT5+OpenCV4.10开发环境搭建QT Creator

VS2022编译器支持配置 QT5默认安装以后支持的是VS2015与VS2017&#xff0c;不支持VS2022&#xff0c;所以必须首先在Qt Creator中配置支持VS2022。配置顺序如下&#xff1a; 首先打开【工具】->【选项】 然点击Kits里面的【编译器】选项。点击Manual下面的【C】然后点击【…