Java进阶学习笔记20——枚举

认识枚举:

枚举是一种特殊的类。

枚举类的格式:

说明:

第一行是罗列枚举的对象名称。只能写合法的标识符(名称),多个名称用逗号隔开。

这些名称本质上都是常量每个变量都会记住枚举类的一个对象。

第二行:可以是类的五大成员。

反编译的情况,我们看到有一个私有的构造器:

javap的用法:我们可以看到更详细的枚举类信息:

枚举类的特点:

枚举类的第一行只能罗列一些名字,这些名称都是常量,并且每个常量记住的都是枚举类的一个一对象。

枚举类的构造器都是私有的(写不写都只能是私有的),因此,枚举类不能创建对象。

枚举类是最终类,不可能被继承。

枚举类中,从第二行开始,可以定义类的其他成员。

编译器为枚举类新增了几个方法,并且枚举类都是继承java.lang.enum类的,从enum类也会继承到一些方法。

测试类:

package cn.ensource.d6_enum;public class Test {public static void main(String[] args) {// 目标:认识枚举A a1 = A.X;System.out.println(a1);// 枚举不能创建对象// 枚举类的第一行都是常量,记住的是枚举类的对象A a2 = A.Y;System.out.println(a2);// 枚举类提供了一些额外的APIA[] as = A.values();   // 拿到全部对象A a3 = A.valueOf("Z");System.out.println(a3.name());System.out.println(a3);System.out.println(a3.ordinal());  // 索引}
}

那抽象枚举如何实现呢?

 

package cn.ensource.d6_enum;// 抽象枚举
public enum B {// 抽象枚举,如何逻辑枚举,因为枚举类B不能直接构建对象,而第一行都是枚举类的对象// 那么就要调用私有的构造器来创建对象,里面需要使用方法重写来把抽象方法重写,多态X() {     // 构造器@Overridepublic void go() {     // 构建对象的时候,重写go方法}},Y("张三") {@Overridepublic void go() {System.out.println(getName() + "在跑~");}};private String name;private B() {}private B(String name) {this.name = name;}public abstract void go();public String getName() {return name;}public void setName(String name) {this.name = name;}
}

这个代码已经算是比较深了。

测试类中:

多学一招:

使用枚举类实现单例设计模式:

package cn.ensource.d6_enum;public enum C {X;    // 单例
}

好牛啊!!!

枚举的常见应用场景:

非常适合用来表示一组信息,然后作为参数进行传播。

用来做信息的分类和标志。

选择定义一个一个的常量来表示一组信息,并作为参数传输。

参数值不受约束;

选择定义枚举表示一组信息,并作为参数传递。

代码可读性好,参数值得到了约束,对使用者更友好,建议使用。

常量类Constant:

package cn.ensource.d7_enum;public class Constant {public static final int BOY = 0;    // 常量性能没有影响public static final int GIRL = 1;
}

测试类:

package cn.ensource.d7_enum;public class Test {public static void main(String[] args) {// 目标:掌握枚举的应用场景,做信息标志和分类
//        check(0);check(Constant.BOY);}public static void check(int sex) {switch (sex) {     // 硬编码,可读性不好case Constant.BOY:System.out.println("展示男人想看的信息");break;case Constant.GIRL:System.out.println("展示女人想看的信息");break;}}
}

这个是软编码。

常量还是存在一个问题:

要求是常量,我们还是写自变量。

int sex形参是不受约束的。

常量类Constants2:

package cn.ensource.d7_enum;public enum Constant2 {BOY, GIRL;
}
package cn.ensource.d7_enum;public class Test {public static void main(String[] args) {// 目标:掌握枚举的应用场景,做信息标志和分类
//        check(0);check(Constant2.BOY);}public static void check(Constant2 sex) {switch (sex) {     // 硬编码,可读性不好case BOY:System.out.println("展示男人想看的信息");break;case GIRL:System.out.println("展示女人想看的信息");break;}}
}

Constant2是一个枚举类型,里面有BOY和GIRL两个枚举对象。

然后使用枚举对象做形参。

有约束性、严谨!

对程序员也比较友好!

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

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

相关文章

Optica数据库 (原OSA美国光学学会电子期刊)文献去哪里查找下载

Optica(OSA)数据库涵盖了光学和光子学理论研究和实际应用的各个领域,包括:光学设备、光学成像、光纤通信、分析方法、光通信、光纤、半导体激光、光传输、光学系统、计量学、带宽、量子电子学。 该库包括18种学会期刊&#xff08…

MVCC 原理分析、MySQL是如何解决幻读的

文章目录 一、前言回顾1.1 事务四大特性ACID1.2 并发事务问题1.3 事务隔离级别 二、MVCC2.1 为什么使用MVCC2.2 基本概念——当前读、快照读、MVCC2.2.1 当前读2.2.2 快照读2.2.3 MVCC 2.3 隐藏字段—— TRX_ID、ROLL_PTR2.4 undo log2.4.1 介绍2.4.2 版本链 2.5 Read View读视…

python写接口性能测试

import time import requestsdef measure_response_time(api_url):try:start_time time.time()response requests.get(api_url, timeout10) # 设置超时时间为10秒end_time time.time()response_time end_time - start_timeprint(f"接口 {api_url} 的响应时间为&#…

读书笔记-Java并发编程的艺术-第1章 并发编程的挑战

文章目录 1.1 上下文切换1.1.1 多线程一定快吗1.1.2 如何减少上下文切换 1.2 死锁1.3 资源限制的挑战 1.1 上下文切换 即时是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给多个线程的时间,因为时间…

C++拓展之scanf和printf

scanf和printf,这东西,说难也不难,可一旦深入学,学两天都可能学不完。 为了输入输出,我们要把这些占位符学一学。 我们来看看AI是怎么回答的。 Q:C格式化占位符有哪些? A:C中常用的…

【手把手带你搓组件库】从零开始实现Element Plus

从零开始实现Element Plus 前言亮点项目搭建1、创建项目初始化monorepo创建 .gitignore目录结构安装基础依赖配置文件创建各个分包入口utilscomponentscoreplaytheme 2、创建VitePress文档3、部署到Github Actions生成 GH_TOKENGitHub Page 演示 4、总结 前言 在本文中&#xf…

面向可复用性和可维护性的设计模式 课程学习总结

什么是设计模式 设计模式:在软件设计中给定上下文中常见问题的通用的、可重用的解决方案。 设计模式分类 1. 创建型模式——Creational patterns 关注对象创建的过程 1.1 工厂方法模式 定义用于创建对象的接口,但让子类决定要实例化哪个类。工厂方…

4.Redis之Redis的通用命令

0.Redis 实战操作 通过 redis-cli 客户端和 redis 服务器交互 涉及到很多的 redis 的命令 【redis 的命令非常非常多!!! 1.掌握常用命令(多操作多练习) 2.学会使用 redis 的文档-> 阅读文档, 是程序猿的基操!! redis 的命令非常非常多!!! 1.掌握常用命令(多操作多练习…

部署CNI网络组件+k8s多master集群部署+负载均衡

一、环境部署 主机服务 192.168.91.5 K8S集群master01192.168.91.8 K8S集群master02192.168.91.6K8S集群node01192.168.91.7K8S集群node02192.168.91.9 负载均衡nginxkeepalive01(master)192.168.91.10 负载均衡nginxkeepalive02(backup&am…

编程实战:自己编写HTTP服务器(系列3:处理框架)

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 系列入口:编程实战…

TypeScript学习日志-第三十二天(infer关键字)

infer关键字 一、作用与使用 infer 的作用就是推导泛型参数,infer 声明只能出现在 extends 子语句中,使用如下: 可以看出 已经推导出类型是 User 了 二、协变 infer 的 协变会返回联合类型,如图: 三、逆变 infer…

pikachu靶场中的CSRF、SSRF通关

目录 1、CSRF介绍 2、CSRF(get) 3、CSRF(post) 4、CSRF Token 5、SSRF介绍 6、SSRF(curl) 7、SSRF(file_get-content) 8、CSRF与SSRF的区别 最近在学习CSRF、SSRF漏洞&#…

Boyer-Moore投票算法

摩尔投票法,又称为博耶-摩尔多数投票算法,是一种用于在一组数据中寻找多数元素(出现次数超过一半的元素)的算法。该算法的效率非常高,时间复杂度为O(n),空间复杂度为O(1),适合处理大数据量的情况。 步骤 首先定义两个…

飞机大战游戏实现揭秘

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、游戏概览与核心玩法 二、游戏模块详解 1. 游戏主循环模块 2. 创建初始化模块 三、关…

美军配备人工智能武器的机器狗引发伦理争议

近日,美国海军陆战队特种作战司令部(MARSOC)的一项测试引发了全球关注:他们正在评估一种由“幽灵机器人”公司研发的最新型机器狗,并考虑为其配备“玛瑙工业”公司提供的武器系统。这一消息犹如在平静的湖面投下一颗石…

Python 之 日志巡检脚本

脚本说明 使用Paramiko库进行SSH连接的自动化脚本,用于检查、配置和排除设备故障。说明如下: 导入所需的库:paramiko、json、logging和concurrent.futures。定义配置文件路径(devices.json)和日志文件路径&#xff0…

阿里巴巴最新研究突破:自我演化大模型,打破性能天花板

获取本文论文原文PDF,请在公众号【AI论文解读】留言:论文解读AI论文解读 原创作者 | 柏企 引言:自我进化的新篇章 在人工智能领域,大型语言模型(LLMs)的发展正迎来一场革命性的变革。传统的训练模式依赖…

006、API_单线程

Redis使用了单线程架构和I/O多路复用模型来实现高性能的内存数据库 服务,本节首先通过多个客户端命令调用的例子说明Redis单线程命令处理 机制,接着分析Redis单线程模型为什么性能如此之高,最终给出为什么理 解单线程模型是使用和运维Redis的…

WordPress国外超人气主题Vikinger汉化版

WordPress国外超人气主题Vikinger汉化版 前言效果图安装教程领取主题下期更新预报 前言 我们在上一个教程已经学过如何安装WordPress,所以现在不用多说。 效果图 安装教程 下载后先本地解压,找到vikinger.zip文件,上传安装并启用主题。 访…

EasyMR 基于国产化信创的适配实践技术详解

国产化信创,即采用国产信息技术产品和服务,构建自主可控的信息技术体系。近年来,随着国家对网络安全和信息安全的重视程度不断提高,国产化信创已经成为国家战略的重要组成部分,并呈现出以下大趋势: ● 政策…