Java 枚举是什么?什么是枚举类?枚举类的用途?

news/2024/7/24 8:45:54 标签: java, 开发语言

目录

1. 什么是枚举?

2. 枚举类

3. 枚举类的用途


1. 什么是枚举?

我们可以从字面意思来理解,枚:一枚一枚的,举:举例,举出,将二者意思结合起来可以理解为一个一个的举出。

这样听起来可能有些模糊,我来给大家说一个场景。

例如我们定义一个月份类,我们肯定已经确定了该类只有1~12月12个类对象,不会再有别的对象了;还有星期数,只有周一~周日七个类对象,不会有星期八这个对象吧。那么如果我们要将这几个对象全部列出来,可以怎么做呢?

首先我们想到的就是创建一个类,然后有几个对象我们就 new 几个对象。 但是这样做有一个问题,如果我们没有私有化它的构造器,开发时不小心有人又创建了其他对象,那岂不是很多余?一个人多创建一个,那么开发人多的时候,创建的对象也会增多,会不会很占用内存,这样是很不友好的。如果我们在一开始就把这些类的对象提前创建出来,并且不让外界再继续创建新的对象,开发人员在有需要的时候直接拿这个类已经创建好的的对象直接使用是不是会更好。由此就引申出来了我们的枚举类。

2. 枚举类

在 Java 中,除了我们平常所熟知的普通 Class 类,它还专门为我们提供了一种枚举类 Eumn。该方法是在 JDK5 之后新增的一个功能,在JDK5以前我们还需要自定义枚举类,现在我们可以直接创建枚举类。

如下图所示,在创建的时候,它就会问你要创建什么类型的类,这个界面大家都不陌生;

对于我们开发人员来说,最常用的是类和接口 ,其它的用的频率没有那么多,我们在学习枚举类的时候,其实可以把它当作普通的类来看待就可以了,我先来创建一个空的枚举类如下代码。

// 定义一个季节枚举类
public enum Season {
    
}

我们在创建好枚举类之后,就可以开始定义它的对象了,我现在定义了的是一个季节枚举类,我们也都知道,季节只有春夏秋冬四个,所以我们就可以在这个枚举类里面定义四个对象分别对应春夏秋冬。

java">// 定义一个季节枚举类
public enum Season {
    // 定义春季
    spring,

    // 定义夏季
    summer,

    // 定义秋季
    autumn,

    // 定义冬季
    winter
}

 这里有几个细节点需要注意!!!

(1)在枚举类中,每个对象前面都是默认添加 public static final 关键词修饰的,public 可以被外界调用。static 静态的可以使用类名.变量名调用,final 修饰不可被外界修改。

(2)每个对象之间使用 "," 分隔开即可,最后一个对象可以不写也可以写 ";" 结尾。

(3)枚举类中已经为各个对象重写了 toString 方法,所以不需要我们再手动添加;

在创建完成对象之后,我们还可以为对象添加属性,这里我给他们添加一个 name 属性,在该枚举类中添加上构造方法

java">// 定义一个季节枚举类
public enum Season {
    // 定义春季
    spring("春"),
    // 定义夏季
    summer("夏"),
    // 定义秋季
    autumn("秋"),
    // 定义冬季
    winter("冬");
    private String name;

    private Season(){}

    private Season(String name){
        this.name = name;
    }
}

然乎我们来输出打印一下

创建 main 方法,通过类名.方法名的方式调用,即可咋控制台看到输出结果

3. 枚举类的用途

通过刚才的阐述,我们也可以大致总结出枚举类的用途,当一个类的对象是有限个数时,我们就可以使用枚举类来定义

在 Java 中,多线程的状态便是采用的枚举类,我们来看一下它的源码就可以得知

State 类就是 Thread 线程类中的一个内部枚举类,里面定义了多个线程的状态,例如NEW,RUNNABLE等等,就不一一说了。


http://www.niftyadmin.cn/n/4993896.html

相关文章

解析经典面试题:for 循环中的 let var

更多文章可以看看我的博客&#xff1a;https://icheng.github.io/ 题目 for循环中&#xff0c;使用 var 或 let 声明 i 变量&#xff0c;会得到不同的结果 var arr []; for (var i 0; i < 2; i) {arr[i] function () {console.log(i);} } arr[0](); arr[1]();输出&…

<C++> 继承

1.继承的概念和定义 继承是面向对象其中的一个核心概念之一&#xff0c;继承允许一个类&#xff08;称为子类或派生类&#xff09;从另一个类&#xff08;称为父类或基类&#xff09;继承属性和行为&#xff0c;以便在子类中重用已有的代码并添加新的功能。通过继承&#xff0…

SAP_ABAP_接口技术_RFC远程函数实践总结

SAP ABAP顾问能力模型梳理_企业数字化建设者的博客-CSDN博客SAP Abap顾问能力模型&#xff0c;ALV/REPORT|SMARTFROM|SCREEN|OLE|BAPI|BDC|PI|IDOC|RFC|API|WEBSERVICE|Enhancement|UserExits|Badi|Debughttps://blog.csdn.net/java_zhong1990/article/details/132469977 SAP接…

回归拟合 | 灰狼算法优化核极限学习机(GWO-KELM)MATLAB实现

这周有粉丝私信想让我出一期GWO-KELM的文章&#xff0c;因此乘着今天休息就更新了(希望不算晚) 作者在前面的文章中介绍了ELM和KELM的原理及其实现&#xff0c;ELM具有训练速度快、复杂度低、克服了传统梯度算法的局部极小、过拟合和学习率的选择不合适等优点&#xff0c;而KEL…

递归算法学习——电话号码的字母组成,括号生成,组合

目录 一&#xff0c;电话号码的字母组合 1.题意 2.例子 3.题目接口 4.解题代码和思路 代码&#xff1a; 思路&#xff1a; 二&#xff0c;括号的生成 1.题意 2.例子 3.题目接口 四&#xff0c;解题代码和思路 1.先写代码&#xff1a; 2.思路 三&#xff0c;组合 …

ChatGPT插件的优缺点

虽然西弗吉尼亚大学的研究人员看到了最新的官方ChatGPT插件——名为“代码解释器”&#xff08; Code Interpreter&#xff09;的教育应用潜力&#xff0c;但他们也发现&#xff0c;对于使用计算方法处理针对癌症和遗传疾病的定向治疗的生物数据的科学家来说&#xff0c;这款插…

在工具提示中使用自绘修改字体

在上一篇文章中&#xff0c;我们学习了如何在应用程序中添加工具提示。在之前的例子代码中&#xff0c;我们通过简单地为创建的工具提示设置了目标字体&#xff0c;这种方法很简单&#xff0c;因为自始至终&#xff0c;我们都只创建了一个工具提示。 但是&#xff0c;如果在应…

【Ambari】Python调用Rest API 获取集群状态信息并发送钉钉告警

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的帮助&#x1f338;文…