枚举的使用(enum)

文章目录

  • 前言
  • 一、枚举是什么?
  • 二、枚举的使用
    • 1.使用枚举设置常量
    • 2.操作枚举类型成员的方法
    • 3.枚举类型中设置构造方法(给枚举常量赋值)
    • 4.枚举常量中设置方法
  • 总结

前言

        枚举类型可以将常量封装在类或接口中,提供了安全检查的功能。枚举类型本质上还是以类的形式存在。本篇文章将讲述枚举的初步使用。


一、枚举是什么?

        枚举是一种数据类型,用于定义一组具体名的常量。枚举常量表示可以取的固定值,通常用于表示一组相关的可能选项。

        设置常量时,我们通常会将常量放置在接口中,以便于在程序中直接使用。被final和static关键字修饰后,该常量不能被修改,如下:

public interface Constants{
    public static final int Contants_A=10;
    public static final int Contants_B=20;
    //Constants-A和Constants-B两个常量不可改变,可直接调用
}

        但有了枚举类型后,便可以取代这种定义方式。使用枚举类型定义常量的语法如下:

public enum Constants{
    Constants_A,
    Constants_B,
    Constants_C;
}

        enum 是定义枚举类型的关键字,当需要在程序中使用Constants枚举中的常量时,可以使用Constants.Constants_A这样的例子来表示。 

二、枚举的使用

1.使用枚举设置常量

        上文已经介绍了如何定义枚举类型,如下为实操展示:

public class ConstantsTest{
    public enum Constants{    //在enum类型中定义常量
        Constants_A,
        Constants_B,
        Constants_C
    }
}

        注意:枚举类中的常量名不能相同,否则会报错。 

2.操作枚举类型成员的方法

        枚举类自身继承于java,lang.Enum类。当定义一个枚举类型,每个枚举类型成员都可以看作没觉类型的一个实例,这些枚举类型成员都默认被final、public、static修饰,所以当使用枚举类型成员时直接使用枚举类型的名称调用枚举类型成员即可

        以下是针对枚举常量使用的常用方法:

枚举类型的常用方法
方法功能描述举例
values()该方法可以将枚举类型的枚举常量以数组的形式返回枚举类型名称.values()
valueOf()该方法可以将普通字符串转换为枚举实例枚举类型名称.valueOf("abc")
compareTo()该方法用于比较两个枚举对象在定义时的顺序枚举常量对象.compareTo(枚举常量对象)
ordinal()该方法用于得到枚举成员的位置索引枚举常量对象.ordinal()

        实操展示:

values()方法: 

public class Menu {
    public enum Constants{
        Constants_A,    //索引位置为0
        Constants_B,    //索引位置为1
        Constants_C;    //索引位置为2

    }

    public static void main(String[] args) {
        for(int i=0;i<Constants.values().length;i++){   //调用了枚举类的value()
            System.out.println(Constants.values()[i]);
        }
    }
}

         运行结果:

        Constants.values()[i]为 以i为索引的Constants枚举常量

valueOf()和compareTo()方法:

public class Menu {
    public enum Constants{
        Constants_A,
        Constants_B,
        Constants_C,
        Constants_D;
    }

    public static void compare(Constants c){    
        //该方法调用了compareTo()进行对比并进行解释
        for(int i =0;i<Constants.values().length;i++){
            Constants.values()[i].compareTo(c);
            System.out.println("Constants_C字符串和"+Constants.values()[i]+"是否相等:"+Constants.values()[i].compareTo(c));
            if(Constants.values()[i].compareTo(c)!=0){
                System.out.println("Constants_C(字符串)枚举常量和"+Constants.values()[i]+"枚举常量不相等");
                System.out.println("------------------------------");
            }else if (Constants.values()[i].compareTo(c)==0) {
                System.out.println("Constants_C(字符串)枚举常量和"+Constants.values()[i]+"枚举常量相等");
                System.out.println("------------------------------");
            }
        }
    }

    public static void main(String[] args) {
        compare(Constants.valueOf("Constants_C"));
    }
}

        运行结果: 

        调用compareTo()方法返回的结果为int值,正值代表方法中的常量在调用该方法的枚举对象位置之前;0代表两个相互比较的枚举成员的位置相同;负值代表方法中参数在调用该方法的枚举对象位置之后。

ordinal()方法:

public class Menu {
    public enum Constants{
        Constants_A,
        Constants_B,
        Constants_C,
        Constants_D;
    }
    public static void main(String[] args) {
        for(int i=0;i<Constants.values().length;i++){
            System.out.println(Constants.values()[i]+"常量在枚举类索引位置为:"+Constants.values()[i].ordinal());    //调用了ordinal()方法
        }   
    }
}

        运行结果:

 

         枚举类型的ordinal()方法用于获取某个枚举对象的位置索引值。

3.枚举类型中设置构造方法(给枚举常量赋值)

        在枚举类型中,可以添加构造方法前提是被private修饰符修饰。添加构造方法的作用是为了给枚举常量赋值,赋什么类型的值,写含什么类型参数的构造方法。枚举类定义的构造方法语法如下:

public class Menu {
    public enum Constants{
        Constants_A("张三"),
        Constants_B("李四"),
        Constants_C("王五"),
        Constants_D(10);

        private String description;
        private int i;
        private Constants(){}    //枚举类默认构造方法
        private Constants(String description){    //枚举类String类构造方法
            this.description=description;    
        }    
        private Constants(int i){    //枚举类int类构造方法
            this.i =i;
        }
    }
}

        无论时有参还是无参构造方法修饰权限都是private。想要为枚举常量赋值,需要如上图创建对应数据类型的构造方法。 如果缺少这一步(写构造方法),给枚举常量赋值会报错的。

        若想获得我们给这些常量赋的值,可以看如下代码,在枚举类中自定义get()方法(当然这些方法权限修饰符为public):

public class Menu {
    public enum Constants{
        Constants_A("张三"),
        Constants_B("李四"),
        Constants_C("王五"),
        Constants_D(10);

        private String description;
        private int i;

        private Constants(){}

        private Constants(String description){
            this.description=description;
        }
        public String getDescription() {    //获得String数据
            return description;
        }

        private Constants(int i){
            this.i =i;
        }
        public int getI(){    //获得int数据
            return i;
        }
    }

    public static void main(String[] args) {
        for(int i=0;i<Constants.values().length;i++){
            System.out.println(Constants.values()[i] + "枚举常量的内容为:" + Constants.values()[i].getDescription());    
        }   
        System.out.println(Constants.values()[3] + "枚举常量的内容为:" + Constants.values()[3].getI());
    }
}

         运行结果:

         如图所示,添加对应数据类型的构造方法,给枚举常量赋值,最后自定义对应数据类型的get()方法,即可获得枚举常量的赋值内容。


总结

        枚举类型的声明为提供了一种友好的变量定义方法,枚举了某种数据类型所有可能出现的值。枚举可以使数据类型安全,数据定义更加紧凑有效,能够与程序的其他部分实现完美交互,运行效率也很高。有补充或指正的内容,欢迎读者在评论区中留言。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源网安参与编制的《代码大模型安全风险防范能力要求及评估方法》正式发布

​代码大模型在代码生成、代码翻译、代码补全、错误定位与修复、自动化测试等方面为研发人员带来了极大便利的同时&#xff0c;也带来了对安全风险防范能力的挑战。基于此&#xff0c;中国信通院依托中国人工智能产业发展联盟&#xff08;AIIA&#xff09;&#xff0c;联合开源…

什么是CDN?CDN的工作原理是怎样的?

1.什么是CDN&#xff1f; CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。CDN是构建在网络之上的内容分发网络&#xff0c;依靠部署在各地的边缘服务器&#xff0c;通过中心平台的负载均衡、内容分发、调度等功能模块&#xff0c;使用户就近获取所需内容&am…

分压电路 ADC计算电压 【老板再也不能开除我了 】

经典分压电路 一个电压过来 adc这里的电压等于&#xff1a; 如是12位adc 那么他最大值就是4095 如参考电压是5v 则&#xff1a;5v/4095 实际电压V*(R2/(R1R2)&#xff09;/adc值 转化&#xff1a;实际电压V 5v*(adc值/4095)/(R2/(R1R2)) &#xff1a;老板再也不能 因为不会…

word文档怎么加密?电脑文件加密的详细步骤【分享4个】

为了保护Word文档不被未经授权的人员访问或修改&#xff0c;我们通常会采用加密的方式来增加其安全性。那么Word文档怎么加密&#xff1f;电脑文档安全成为了大家所关心的话题。 本文针对不同的情况&#xff0c;本文分享了4种电脑文件加密的方法&#xff0c;每一种加密方法都比…

2-自动驾驶关键技术框架

框架 来自《自动驾驶汽车决策与控制》这本书 三大技术 车载平台的关键技术&#xff1a; 环境感知技术&#xff1a;这是自动驾驶车辆能够“看”和“感知”周围世界的技术。它包括使用摄像头、雷达、激光雷达&#xff08;Lidar&#xff09;和超声波传感器来检测和识别道路、障…

js实现数据加密,jwt加密方式

一个简单的数据加密 const crypto require("crypto");// 普通的数据加密 function sign(msg,key){ // 原始信息&#xff0c;密钥 String// "sha256" :加密的算法&#xff0c;key :密钥&#xff0c;msg :要加密的信息&#xff0c;"hex" :转成16…

【unity笔记】六、UI实现下拉列表切换视角

具体步骤如下 1. 创建UI下拉列表&#xff1a; 在Unity场景中右键点击并选择UI -> 下拉列表 来创建一个新的下拉列表。 2. 添加摄像机选项&#xff1a; 在Dropdown的Options属性中添加新的选项&#xff0c;通过点击按钮来添加选项&#xff0c;并为每个选项设置一个显示名…

创建github个人博客

文章目录 安装Hexo安装git安装Node.js安装 Hexo 安装Hexo 参考官方文档&#xff1a;https://hexo.io/zh-cn/docs/ Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown&#xff08;或其他标记语言&#xff09;解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的…

springboot多数据源应用,A服务依赖于B服务jar包,A服务和B服务业务数据分别入自己的库如何做?

上一节我们简单阐述了springboot多数据源如何配置。在实际的业务场景中我们常常遇到A服务依赖于B服务jar包&#xff0c;A服务和B服务业务数据分别入自己的库中。为何要这么做呢&#xff1f;比如B服务是日志SDK&#xff0c;A服务集成B服务来实现记录日志的功能&#xff0c;但是日…

Stable Diffusion 3 正式开源,超强文生图模型 SD3-M 上线,赶紧来试试吧!

前言 我们都知道 Stable Diffusion 3 是一款强大的文生图模型&#xff0c;拥有20亿参数&#xff0c;因其高效的推理速度和卓越的生成效果而备受瞩目。 近日&#xff0c;Stability AI在推特上宣布正式开源了 Stable Diffusion 3 Medium&#xff08;SD3-M&#xff09; 权重&…

网络编程篇: HTTPS协议

一.前置知识 早期很多公司刚起步的时候&#xff0c;使用的应用层协议都是HTTP&#xff0c;而HTTP无论是用GET方法还是POST方法传参&#xff0c;都是没有经过任何加密的&#xff0c;因此早期很多的信息都是可以通过抓包工具抓到的。 为了解决这个问题&#xff0c;于是出…

网络安全事件研判

研判&#xff08;入侵检测&#xff09; 研判我理解为人工层面对入侵检测事件进行再分析&#xff0c;即借助已有的设备告警根据经验判断是否为真实攻击 研判工作要充分利用已有安全设备&#xff08;需要提前了解客户的网络拓扑以及部署设备情况&#xff09;&#xff0c;分析其近…

【SQL Server数据库】关系模式与关系代数

目录 一、请用关系代数完成下列查询 1. 求 供应工程J1 零件P1的供应商号码SNO&#xff1b; 2. 求 供应工程J1 零件&#xff08;P&#xff09;为红色 的供应商号码SNO&#xff1b; 3. 求 没有使用 天津供应商&#xff08;P&#xff09;生产的红色零件&#xff08;S&#xff0…

Sam Altman:从少儿奇才到OpenAI掌舵人

自2022年底发布了ChatGPT以来&#xff0c;OpenAI及其首席执行官Sam Altman迅速成为科技界的焦点人物。Altman的崛起并非偶然&#xff0c;而是长期以来不断追求权力和创新的结果。本文将回顾Altman的成长历程&#xff0c;探索他如何一步步走向OpenAI的顶峰。 童年与教育背景 S…

六款顶级原型设计工具推荐,满足你所有需求!

即时设计作为一款专业原型工具&#xff0c;无论是从功能还是插件库配备情况来看&#xff0c;都是毫无疑问可以进行原型图设计的&#xff0c;而且&#xff0c;即时设计内设海量资源库&#xff0c;可以支持大家通过关键词进行搜索相关资源&#xff0c;并且在线编辑使用&#xff0…

2024年最新中级会计职称考试题库。

46.甲将一汇票背书转让给乙&#xff0c;但该汇票上未记载乙的名称。其后&#xff0c;乙在该汇票被背书人栏内记载了自己的名称。根据《票据法》的规定&#xff0c;下列有关该汇票背书与记载效力的表述中&#xff0c;正确的是&#xff08;&#xff09;。 A.甲的背书无效&#x…

DVWA 靶场 JavaScript 通关解析

前言 DVWA代表Damn Vulnerable Web Application&#xff0c;是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序&#xff0c;旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。 DVWA提供了一系列的漏洞场…

项目实训-vue(十三)

项目实训-vue&#xff08;十三&#xff09; 文章目录 项目实训-vue&#xff08;十三&#xff09;1.概述2.处理按钮 1.概述 本篇博客将记录我在图片上传页面中的工作。 2.处理按钮 实现了图片的上传之后&#xff0c;还需要设置具体的上传按钮。 这段代码使用 Element UI 的 …

Python:浅谈迭代器、生成器与协程的演化路径

“人生苦短&#xff0c;我用Python”&#xff0c;虽然说大量数学和统计分析库是一个重要优势&#xff0c;但是归根结底&#xff0c;Python的最大优势就是三点&#xff1a; 但是通常一般来讲&#xff0c;当扯到并发的时候&#xff0c;无论是多服务器、多进程、多线程、还是协程&…

SHELL/作业/2024/6/25

终端输入两个数&#xff0c;判断两数是否相等&#xff0c;如果不相等&#xff0c;判断大小关系 #!/bin/basha$1b$2 if [ $a -eq $b ]then echo "ab"elif [ $a -gt $b ]thenecho "a>b"elseecho "a<b"fi2.已知网址www.hqyj.com…