《Java-SE-第三十六章》之枚举

前言

在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!”

博客主页:KC老衲爱尼姑的博客主页

博主的github,平常所写代码皆在于此

共勉:talk is cheap, show me the code

作者是爪哇岛的新手,水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!


文章目录

  • 枚举
    • 概述
    • 基本使用
      • 枚举和switch
      • 向enum类中添加方法与自定义构造函数
      • 枚举类不能进行反射的原因
      • 单例模式


枚举

概述

枚举类型是Java5以后引用的新特性,它是一种特殊的数据类型,之所以特殊是因为它既是一种类类型但是又比类类型多了一些特殊的约束。其主要的用途是:将一组常量组织起来。在此之前表示一组常量通常是使用定义常量的方式:

public class CoolDemo {public static  final int RED = 1;public static  final int GREEN = 2;public static  final int BLACK = 3;
}

但是常量举例有不好的地方,比如:可能存在定义int值相同的变量,但是它有可能被误以为是RED,编译器也不会有任何警告,因此这种方式在枚举出现后就不提倡了,我们利用枚举类型来重新定义上述的常量。

public enum CoolType {RED,BLACK,GREEN
}

在定义枚举类型的时我们使用的关键字是enum,enum是定义枚举类型。枚举类型Cool分别定义了红色,黑色,绿色。这些值一般都是大写字母,多个值之间用逗号隔开。那么如何使用呢?如下

public class Demo {public static void main(String[] args) {CoolType black = CoolType.BLACK;}
}

我们使用enum关键字定义的枚举类,本质上是java.lang.Enum的子类。虽然自己编写的枚举类,没有显示的继承Enum,但是它默认继承和这个类。

基本使用

枚举和switch

使用swtich进行条件判断的时候,条件参数一般只能是整型,字符型。而枚举类型也被switch所支持,字符串在java1.7后也被switch所支持。接下来,我们简单看一下枚举和switch的使用:

public class EnumDemo4 {public static void printName(ColorType color){switch (color){//无需使用Color进行引用case RED:System.out.println("蓝色");break;case BLACK:System.out.println("红色");break;case GREEN:System.out.println("绿色");break;}}public static void main(String[] args){printName(ColorType.RED);printName(ColorType.BLACK);printName(ColorType.GREEN);}
}

向enum类中添加方法与自定义构造函数

public enum CoolType {RED("红色", 1),BLACK("黑色", 2),GREEN("绿色", 3);private String color;private int key;CoolType(String color, int key) {this.color = color;this.key = key;}public String getColor() {return color;}public int getKey() {return key;}public static void main(String[] args) {for (CoolType c: CoolType.values()) {System.out.println("color:"+c.color+"key:"+c.key);}}
}

运行结果 :

color:红色key:1
color:黑色key:2
color:绿色key:3

Process finished with exit code 0

枚举类不能进行反射的原因

我们来看看构造方法源码

	@CallerSensitivepublic T newInstance(Object ... initargs)throws InstantiationException, IllegalAccessException,IllegalArgumentException, InvocationTargetException{if (!override) {//这就是判断如果是枚举类型那么就只接抛出异常了, 也就不能进行构造了if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) {Class<?> caller = Reflection.getCallerClass();checkAccess(caller, clazz, null, modifiers);}}if ((clazz.getModifiers() & Modifier.ENUM) != 0)throw new IllegalArgumentException("Cannot reflectively create enum objects");ConstructorAccessor ca = constructorAccessor;   // read volatileif (ca == null) {ca = acquireConstructorAccessor();}@SuppressWarnings("unchecked")T inst = (T) ca.newInstance(initargs);return inst;}

其中有一段代码

if ((clazz.getModifiers() & Modifier.ENUM) != 0)

这就是判断如果是枚举类型那么就只接抛出异常了, 也就不能进行构造了。

单例模式

public enum Singleton {INSTANCE;public static Singleton getInstance() {return INSTANCE;}public static void main(String[] args) {Singleton singleto1 = Singleton.getInstance();Singleton singleto2 = Singleton.getInstance();System.out.println("两个实例是否相同:"+(singleto1==singleto2));}
}

各位看官如果觉得文章写得不错,点赞评论关注走一波!谢谢啦!。

在这里插入图片描述

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

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

相关文章

Redis 拒绝服务漏洞(CVE-2023-28856)修复处理

一、漏洞描述 Redis Labs Redis是美国Redis Labs公司的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值&#xff08;Key-Value&#xff09;存储数据库&#xff0c;并提供多种语言的API。 Redis 7.0.0 到 7.0.10版本、6.2.0 到 6.2.11版本、6.0.0 到 …

Android Studio跳过Haxm打开模拟器

由于公司权限限制无法安装Haxm&#xff0c;这个时候我们可以试试Arm相关的镜像去跳过Haxm运行模拟器。解决方案&#xff1a;安装API27以下的Arm Image. #ifdef __x86_64__if (sarch "arm64" && apiLevel >28) {APANIC("Avds CPU Architecture %s i…

Ubuntu常用压缩指令总结

一、tar tar是Linux系统中最常用的压缩工具之一&#xff0c;它的一个优点是它可以保留文件的权限和所有权信息。tar可以创建.tar文件&#xff08;通常称为"tarball"&#xff09;&#xff0c;或者与gzip或bzip2等工具结合使用来创建.tar.gz或.tar.bz2文件。gzip工具的…

Linux文件系统管理

Linux文件系统管理 磁盘的组成与分区 计算机用于存取文件的硬件是磁盘&#xff0c;磁盘的组成主要有磁盘盘、机械手臂、磁盘读取头与主轴马达所组成&#xff0c; 而数据的写入其实是在磁盘盘上面。磁盘盘上面又可细分出扇区(Sector)与磁道(Track)两种单位&#xff0c; 其中扇区…

pc端网页用vue并且实现响应式 vue+bootstrap-vue

1、hbuiler内新建vue项目 在项目文件夹下用npm加载依赖&#xff08;或者用hbuilder内打开命令&#xff09; 2、配置路由 src内新建router文件夹&#xff0c;router内新建index.js index.js内配置重定向到首页 main.js内配置路由 import router from /router/index.js new…

J35复杂链表的复制

题目地址&#xff1a;复杂链表的复制_牛客题霸_牛客网 题目回顾&#xff1a; 解题思路&#xff1a; 这里我们采用双指针的方法。 我们在创建节点的时候&#xff0c;可能当前节点创建了&#xff0c;但是当前节点的随机指针指向的节点还没创建&#xff0c;这种情况下&#xff…

JVM 基础

巩固基础&#xff0c;砥砺前行 。 只有不断重复&#xff0c;才能做到超越自己。 能坚持把简单的事情做到极致&#xff0c;也是不容易的。 JVM 类加载机制 JVM 类加载机制分为五个部分&#xff1a;加载&#xff0c;验证&#xff0c;准备&#xff0c;解析&#xff0c;初始化&am…

zookeeper案例

目录 案例一&#xff1a;服务器动态上下线 服务端&#xff1a; &#xff08;1&#xff09;先获取zookeeper连接 &#xff08;2&#xff09;注册服务器到zookeeper集群&#xff1a; &#xff08;3&#xff09;业务逻辑&#xff08;睡眠&#xff09;&#xff1a; 服务端代码…

RHEL 7配置HAProxy实现Web负载均衡

一、测试环境HAProxy&#xff1a; 主机名&#xff1a;RH7-HAProxy IP地址&#xff1a;192.168.10.20 操作系统&#xff1a;Red Hat Enterprise Linux Server release 7.2 (Maipo)最小化安装 防火墙与SELinux&#xff1a;关闭 安装的服务&#xff1a;HAProxy-1.5.14 WEB01: 主…

Javascript异步编程的4种方法

你可能知道&#xff0c;Javascript语言的执行环境是"单线程"&#xff08;single thread&#xff09;。 所谓"单线程"&#xff0c;就是指一次只能完成一件任务。如果有多个任务&#xff0c;就必须排队&#xff0c;前面一个任务完成&#xff0c;再执行后面一…

msvcp110.dll丢失怎样修复,msvcp110.dll丢失修复方法

msvcp110.dll是Microsoft C库的一部分&#xff0c;它是运行依赖于该库的程序所必需的动态链接库文件。它的作用是提供C运行时库函数的实现&#xff0c;这些函数用于处理程序的内存管理、异常处理、多线程支持等。当系统中缺少或损坏了msvcp110.dll文件时&#xff0c;请及时修复…

Python-OpenCV中的图像处理-图像梯度

Python-OpenCV中的图像处理-图像梯度 图像梯度Sobel 算子和 Scharr 算子Laplacian 算子 图像梯度 图像梯度&#xff0c;图像边界等使用到的函数有&#xff1a; cv2.Sobel()&#xff0c; cv2.Scharr()&#xff0c; cv2.Laplacian() 等原理&#xff1a;梯度简单来说就是求导。Op…

dialogbot:开箱即用的对话机器人解决方案,涵盖问答型对话、任务型对话和聊天型对话等多种场景,为您提供全方位的对话交互体验。

dialogbot&#xff1a;开箱即用的对话机器人解决方案&#xff0c;涵盖问答型对话、任务型对话和聊天型对话等多种场景&#xff0c;支持网络检索问答、领域知识问答、任务引导问答和闲聊问答&#xff0c;为您提供全方位的对话交互体验。 人机对话系统一直是AI的重要方向&#xf…

Mongodb 常用操作

// 查询 user_id 是否存在 db.getCollection("t_mongo_user").find({"user_id" : { $exists: true }}) // 查询 user_id 10 的记录 db.getCollection("t_mongo_user").find({"user_id" : 10}) // 排序 -1&#xff0c;按照 _id 倒…

python之matplotlib入门初体验:使用Matplotlib进行简单的图形绘制

目录 绘制简单的折线图1.1 修改标签文字和线条粗细1.2 校正图形1.3 使用内置样式1.4 使用scatter()绘制散点图并设置样式1.5 使用scatter()绘制一系列点1.6 python循环自动计算数据1.7 自定义颜色1.8 使用颜色映射1.9 自动保存图表练习题 绘制简单的折线图 绘制一个简单折线图…

每期一个小窍门: 玩转go mod 命令

看完本期小窍门 你将学会 go下载/更新 包的命令如何挎包调用/路径名称约定init()函数的作用和一些细节 本文涉及到的目录结构如下 关于 go.mod go.sum 这个demo依赖 github.com/bytedance/sonic 可以使用下面两个命令来确保依赖正常加载 go get github.com/bytedance/son…

2023年上半年数学建模竞赛题目汇总与难度分析

2023年上半年数学建模竞赛题目汇总与难度分析 ​由于近年来国赛ABC题出题方式漂浮不定&#xff0c;没有太大的定性&#xff0c;目前总体的命题方向为&#xff0c;由之前的单一模型问题变为数据分析评价优化或者预测类题目是B、C题的主要命题方向。为了更好地把握今年命题的主方…

【源码分析】XXL-JOB的执行器的注册流程

目的&#xff1a;分析xxl-job执行器的注册过程 流程&#xff1a; 获取执行器中所有被注解(xxlJjob)修饰的handler执行器注册过程执行器中任务执行过程 版本&#xff1a;xxl-job 2.3.1 建议&#xff1a;下载xxl-job源码&#xff0c;按流程图debug调试&#xff0c;看堆栈信息…

gcc/g++ 编译选项详解

gcc/g 编译选项详解 文章目录 gcc/g 编译选项详解编译步骤gcc 与 g 区别gcc 命令的常用选项编译优化选项-O 优化-O1优化-O2-O0-Os-Ofast-Og-Oz-O 选项控制特定的优化 WarningsReference>>>>> 欢迎关注公众号【三戒纪元】 <<<<< 编译步骤 gcc 、…

Shell编程之正则表达式(非常详细)

正则表达式 1.通配符和正则表达式的区别2.基本正则表达式2.1 元字符 &#xff08;字符匹配)2.2 表示匹配次数2.4 位置锚定2.5 分组 和 或者 3.扩展正则表达式4.部分文本处理工具4.1 tr 命令4.2 cut命令4.3 sort命令4.4 uniq命令 1.通配符和正则表达式的区别 通配符一般用于文件…