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

news2024/11/24 22:57:53

前言

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

博客主页: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

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

我们来看看构造方法源码

	@CallerSensitive
    public 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 volatile
        if (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.coloradmin.cn/o/873371.html

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

相关文章

预知未来:揭示公司倒闭的隐秘迹象

引言 在商业世界中&#xff0c;公司的倒闭是一种常见的现象。然而&#xff0c;对于那些在公司中工作的人来说&#xff0c;这可能是一场灾难。作为一名资深的人力资源专业人员&#xff0c;我认为我们有责任提前察觉公司可能倒闭的迹象&#xff0c;以便我们可以采取适当的行动来…

一起学SF框架系列7.2-spring-AOP-AOP使用

Spring AOP有两种使用模式&#xff1a;AspectJ配置模式和xml配置模式。 AspectJ配置模式 配置 1、加入依赖包&#xff1a; <!--spring aop依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId&…

Gartner发布2023年的存储技术成熟曲线

技术路线说明 Gartner自1995年起开始采用技术成熟度曲线&#xff0c;它描述创新的典型发展过程&#xff0c;即从过热期发展到幻灭低谷期&#xff0c;再到人们最终理解创新在市场或领域内的意义和角色。 一项技术 (或相关创新)在发展到最终成熟期的过程中经历多个阶段&#xff1…

接口也默认继承Object类

目标&#xff1a; 1. 知道接口也默认继承Object类 2. 感受继承和重写在向上转型中的作用有多大 引出问题&#xff1a; 在我用 List接口的引用list 接收ArrayList这个集合类的实例时&#xff08;此处发生向上转型&#xff09;&#xff0c;偶然发现&#xff0c;咦&#xff0c…

【Python常用函数】一文让你彻底掌握Python中的toad.selection.select函数

任何事情都是由量变到质变的过程&#xff0c;学习Python也不例外。只有把一个语言中的常用函数了如指掌了&#xff0c;才能在处理问题的过程中得心应手&#xff0c;快速地找到最优方案。本文和你一起来探索Python中的toad.selection.select函数&#xff0c;让你以最短的时间明白…

Grounding dino + segment anything + stable diffusion 实现图片编辑

目录 总体介绍总体流程 模块介绍目标检测&#xff1a; grounding dino目标分割&#xff1a;Segment Anything Model (SAM)整体思路模型结构&#xff1a;数据引擎 图片绘制 集成样例 其他问题附录 总体介绍 总体流程 本方案用到了三个步骤&#xff0c;按顺序依次为&#xff1a…

YOLOv5入门实践(2)— 手把手教你使用make sense标注数据集(附工具地址+使用教程)

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。鉴于labelimg图像标注软件安装起来比较麻烦&#xff0c;本节课再给大家介绍另外一款数据集标注工具。这是一款在线标注数据集的工具&#xff0c;用起来非常的方便。&#x1f308; 前期回顾&#xff1a; YOLOv5入门实践&…

当执行MOV [0001H] 01H指令时,CPU都做了什么?

今天和几位单位大佬聊天时&#xff0c;讨论到一个非常有趣的问题-当程序执行MOV [0001H], 01H计算机实际上都做了哪些工作&#xff1f;乍一看这个问题平平无奇&#xff0c;CPU只是把立即数01H放在了地址为0001的内存里&#xff0c;但仔细想想这个问题远没有那么简单&#xff0c…

SystemVerilog之覆盖率详解

文章目录 1.0 覆盖率前言1.1 覆盖率类型1.2 覆盖策略及覆盖组1.3 覆盖率数据采样1.3.1 bin的创建与使用1.3.2 条件覆盖率1.3.3 翻转覆盖率1.3.4 wildcard覆盖率1.3.5 忽略bin与非法bin 1.4 交叉覆盖率1.4.1 排除部分cross bin1.4.2 精细化交叉覆盖率1.4.3 单个实例的覆盖率1.4.…

定量分析计算51单片机复位电路工作原理 怎么计算单片机复位电容和电阻大小

下面画出等效电路图 可以知道单片机内必然有一个电阻RX&#xff0c;为了简化分析&#xff0c;我们假设他是线性电阻&#xff08;不带电容&#xff0c;电感的支路&#xff09; 还有一个基础知识&#xff1a; 电容器的充电放电曲线&#xff1a; 还需要知道电容电压的变化是连续…

【简单认识zookeeper+kafka分布式消息队列集群的部署】

文章目录 一、zookeeper1、定义2、工作机制3、Zookeeper 特点4、Zookeeper 数据结构5、Zookeeper 应用场景6、Zookeeper 选举机制&#xff08;1&#xff09;第一次启动选举机制&#xff08;2&#xff09;非第一次启动选举机制 7、部署zookeeper群集 二、消息队列概述1、为什么需…

《线性调频雷达典型有源干扰抑制技术研究》阅读记录

文章目录 《线性调频雷达典型有源干扰抑制技术研究》 阅读记录&#xff08;1&#xff09;研究背景与意义&#xff1a;&#xff08;2&#xff09;有源压制干扰&#xff08;3&#xff09;有源欺骗式干扰&#xff08;4&#xff09;压制干扰的抑制&#xff08;5&#xff09;欺骗干扰…

面试热题(全排列)

给定一个不含重复数字的整数数组 nums &#xff0c;返回其 所有可能的全排列 。可以 按任意顺序 返回答案。 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 先在这里说明一下排列和组合的区别? 组合&#xff1a;是指从一…

[gdc]Rendering ‘God of War Ragnark‘

gdc23&#xff0c; sony santa monica关于god of war的分享&#xff1b; back ground 作者stephen mcauley现在是santa monica的technical director&#xff1b;20年加入santa monica&#xff0c;作为rendering lead&#xff0c;有9年的经验&#xff0c;之前在ubisoft montre…

[鹤城杯 2021]Middle magic 解题思路过程

过程 打开题目&#xff0c;是一道PHP的代码审计。代码如下&#xff1a; <?php highlight_file(__FILE__); include "./flag.php"; include "./result.php"; if(isset($_GET[aaa]) && strlen($_GET[aaa]) < 20){$aaa preg_replace(/^(.*)…

河道水位自动监测预警 yolov5

河道水位自动监测预警系统基于yolov5网络模型AI视频智能水尺读数技术&#xff0c;河道水位自动监测预警系统通过在河道周边布设监控摄像头&#xff0c;实时监测水位的变化&#xff0c;一旦水位超过预设阈值&#xff0c;将自动发出预警信号&#xff0c;并提示相关人员采取相应的…

计算机网络-物理层(一)物理层的概念与传输媒体

计算机网络-物理层&#xff08;一&#xff09;物理层的概念与传输媒体 物理层相关概念 物理层的作用用来解决在各种传输媒体上传输比特0和1的问题&#xff0c;进而为数据链路层提供透明(看不见)传输比特流的服务物理层为数据链路层屏蔽了各种传输媒体的差异&#xff0c;使数据…

Java 基础知识点

Object 类相关方法 getClass 获取当前运行时对象的 Class 对象。 hashCode 返回对象的 hash 码。 clone 拷贝当前对象&#xff0c; 必须实现 Cloneable 接口。浅拷贝对基本类型进行值拷贝&#xff0c;对引用类型拷贝引用&#xff1b;深拷贝对基本类型进行值拷贝&#xff0c;对…

CentOS7.7.1908升级python3版本

介绍 本文将详细介绍在CentOS7.7.1908系统的服务器将自带的python版本升级到3.8.0版本的过程。 在升级前CentOS7.7.1908中已经存在旧python版本。 查看CentOS版本命令&#xff1a; cat /etc/centos-release升级前后的python版本&#xff08;python3升级前为3.6.8&#xff09…

开箱报告,Simulink Toolbox库模块使用指南(三)——Simscape 电路仿真模块

文章目录 前言 Simscape 电路仿真模块 模型搭建 仿真求解 分析和应用 总结 前言 见《开箱报告&#xff0c;Simulink Toolbox库模块使用指南&#xff08;一&#xff09;——powergui模块》 见《开箱报告&#xff0c;Simulink Toolbox库模块使用指南&#xff08;二&#xf…