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.rhkb.cn/news/331707.html

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

相关文章

RobotFramework测试框架(13)--内置测试库

Builtln Evaluate方法 Evaluate。它可以做很多事情,主要的作用是可以直接调用Python的方法 一般用Evaluate都是前面放变量接收值,第三列是具体的运算表达式,第四列是要用到的Python的module。这里就是用random来进行一个随机数的生成 Cons…

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} 的响应时间为&#…

nodeJs学习(第一周)

文章目录 学习总结nodejs基础知识核心模块(内置模块)fs(file-system)文件系统fs增删查改urlQuery String httprequest根据不同的请求路径发送不同的响应结果requireip地址和端口号Content-Type 第三方模块 express登录接口逻辑分析…

乡村振兴的乡村文化传承与活化:活化乡村传统文化,传承乡村文化基因,打造具有文化魅力的美丽乡村

目录 一、引言 二、乡村文化的独特价值与现状 三、活化乡村传统文化的策略 1、挖掘乡村文化资源 2、创新文化表达方式 3、加强文化产业发展 四、传承乡村文化基因的途径 1、加强文化教育 2、培育文化人才 3、弘扬文化精神 五、打造具有文化魅力的美丽乡村 1、规划乡…

Photoshop插件(UXP)编写过程中,如何更新sp-checkbox的选中状态

✨问题说明 sp-checkbox是uxpSpectrum UXP Widgets下的一个小组件&#xff0c;内置样式大概是这样&#xff1a; 那么&#xff0c;如果用js动态的改变选中的状态&#xff0c;应该如何做呢&#xff1f; 如果直接是html来写&#xff1a; <sp-checkbox checked>Checked<…

基于SpringBoot+Vue+Mysql的实验室低值易耗品管理系统

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

求斐波那契数列第n项的值

本期介绍&#x1f356; 主要介绍&#xff1a;什么是斐波那契数列&#xff0c;递归实现求斐波那契数列第n项值&#xff0c;递归法为什么不适合求斐波那契数&#xff0c;用迭代法实现求斐波那契数列的值&#x1f440;。 文章目录 1. 斐波那契数列是什么&#xff1f;2. 题目2. 递归…

【Python 对接QQ的接口(二)】简单用接口查询【等级/昵称/头像/Q龄/当天在线时长/下一个等级升级需多少天】

文章日期&#xff1a;2024.05.25 使用工具&#xff1a;Python 类型&#xff1a;QQ接口 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算法&#xff09;&…

Android9.0 MTK平台如何增加一个系统应用

在安卓定制化开发过程中&#xff0c;难免遇到要把自己的app预置到系统中&#xff0c;作为系统应用使用&#xff0c;其实方法有很多&#xff0c;过程很简单&#xff0c;今天分享一下我是怎么做的&#xff0c;共总分两步&#xff1a; 第一步&#xff1a;要找到当前系统应用apk存…

Golang并发编程-协程goroutine的信道(channel)

文章目录 前言一、信道的定义与使用信道的声明信道的使用 二、信道的容量与长度三、缓冲信道与无缓冲信道缓冲信道无缓冲信道 四、信道的初体验信道关闭的广播机制 总结 前言 Goroutine的开发&#xff0c;当遇到生产者消费者场景的时候&#xff0c;离不开 channel&#xff08;…

关于XtremIO 全闪存储维护的一些坑(建议)

XtremIO 是EMC过去主推的一款全闪存储系统&#xff0c;号称性能小怪兽&#xff0c;对付那些对于性能要求极高的业务场景是比较合适的&#xff0c;先后推出了1代和2代产品&#xff0c;目前这个产品好像未来的演进到了PowerStor或者PowerMax全闪&#xff0c;应该不独立发展这个产…

存在重复元素 II[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个整数数组nums和一个整数k&#xff0c;判断数组中是否存在两个不同的索引i和j&#xff0c;满足nums[i] nums[j]且abs(i - j) < k。如果存在&#xff0c;返回true&#xff1b;否则&#xff0c;返回false。 示例 1&#…

Excel工作簿/表的合并/拆分全集(一文通关)

概述 在工作中&#xff0c;我们常会用到到Excel拆分/合并为多个工作表/簿&#xff0c;如全国的订单表&#xff0c;需要根据省份列拆分下发至对应的省、各省份数据需要汇总、...... 应该如何操作呢&#xff1f; 1. 传统方法&#xff08;借助透视表、Power Query编辑器、VBA实现…

jvm的类加载

文章目录 概要加载类加载器分类双亲委派模型自定义加载器 验证准备解析初始化<cinit>与<init> 概要 jvm运行时的整体结构如下 一个Car类&#xff0c;类跟Car对象的转换过程如下&#xff1a; 加载后的class类信息存放于方法区&#xff1b;ClassLoader只负责clas…

C++ vector类

目录 0.前言 1.vector介绍 2.vector使用 2.1 构造函数(Constructor) 2.1.1. 默认构造函数 (Default Constructor) 2.1.2 填充构造函数 (Fill Constructor) 2.1.3 范围构造函数 (Range Constructor) 2.1.4 拷贝构造函数 (Copy Constructor) 2.2 迭代器(Iterator) 2.2.…

多项式重构的平滑和法线估计-------PCL

多项式重构的平滑和法线估计 /// <summary> /// 多项式重构的平滑和法线估计 /// </summary> /// <param name"cloud"></param> /// <returns>输出一个包含平滑后的点云数据以及相应法线信息的数据结构</returns> pcl::PointCl…

《计算机网络微课堂》课程概述

​ 课程介绍 本专栏主要是 B 站课程《计算机网络微课堂》的文字版&#xff0c;作者是湖南科技大学的老师。 B 站地址&#xff1a;https://www.bilibili.com/video/BV1c4411d7jb 该课程好评如潮&#xff0c;包含理论课&#xff0c;实验课&#xff0c;考研真题分析课&#xf…

阅读笔记——《ProFuzzBench: A Benchmark for Stateful Protocol Fuzzing》

【参考文献】Natella R, Pham V T. Profuzzbench: A benchmark for stateful protocol fuzzing[C]//Proceedings of the 30th ACM SIGSOFT international symposium on software testing and analysis. 2021: 662-665.【注】本文仅为作者个人学习笔记&#xff0c;如有冒犯&…

Day01-Web开发、介绍、HTML

一、什么是 Web ? Web:全球广域网&#xff0c;也称为万维网(www World Wide Web)&#xff0c;能够通过浏览器访问的网站。 <!-- 文档类型为HTML --> <!DOCTYPE html> <html lang"en"> <head><!-- 字符集 --><meta charset"U…

移动端开发 笔记01

目录 01 移动端的概述 02 移动端的视口标签 03 开发中的二倍图 04 流式布局 05 弹性盒子布局 01 移动端的概述 移动端包括:手机 平板 便携式设备 目前主流的移动端开发: 安卓设备 IOS设备 只要移动端支持浏览器 那么就可以使用浏览器开发移动端项目 开发移动端 使用…