Java枚举详解
一.枚举
1.为什么有枚举?
如果我们的程序需要表示固定的几个值:
比如季节:spring (春),summer(夏),autumn(秋),winter(冬)
用常量表示:
public static final int SEASON_SPRING = 1;public static final int SEASON_SUMMER = 2;public static final int SEASON_AUTUMN = 3;public static final int SEASON_WINTER = 4;
用常量表示季节的弊端
1.代码不够简洁
2.不同类型的数据是通过名字区分的
3.不安全,由于是数字类型,就有可能使用这几个值做一些运算操作;比如:
SEASON_SPRING + SEASON_SUMMER
为了间接的表示一些固定的值,Java就给我们提供了枚举。
2.枚举的格式
概念:
枚举:是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。
格式:
public enum s {
枚举项1,枚举项2,枚举项3;
}
定义枚举类要用关键字enum
练习:
定义一个枚举类,用来表示春,夏,秋,冬这四个固定值
package com.gch.d5_enum.demo1;/**定义枚举类*/
public enum Season {SPRING,SUMMER,AUTUMN,WINTER;
}
3.枚举的特点
1.所有枚举类都是Enum的子类
2.我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项
3.每一个枚举项其实就是该枚举的一个对象
4.枚举也是一个类,也可以去定义成员变量
5.枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,
但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
6.枚举类可以有构造器,但必须是private的,它默认也是private的。
枚举项的用法比较特殊:枚举("");
7.枚举类也可以有抽象方法,但是枚举项必须重写该方法。8.如果枚举项的后面什么都不写,那么此时它就默认调用枚举项的空参构造,如果想让它不 报错,只有让每一个枚举项去调用有参构造:枚举项(参数1,参数2){}
package com.gch.d5_enum.demo2;/**定义枚举类*/
public enum Season {// 5.枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,// 但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略// 如果枚举项的后面什么都不写,那么此时它就默认调用枚举项的空参构造// 如果想让它不报错,只有让每一个枚举项去调用有参构造:枚举项(参数1,参数2){}SPRING("春"){// 如果枚举类中有抽象方法// 那么在枚举项中必须要全部重写@Overridepublic void show() {System.out.println(this.name);}},SUMMER("夏"){@Overridepublic void show() {System.out.println(this.name);}},AUTUMN("秋"){@Overridepublic void show() {System.out.println(this.name);}},WINTER("冬"){@Overridepublic void show() {System.out.println(this.name);}};// 4.枚举也是一个类,也可以去定义成员变量public String name;// 空参构造
// private Season(){}// 有参构造private Season(String name){this.name = name;}// 抽象方法public abstract void show();
}
package com.gch.d5_enum.demo2;public class EnumDemo {public static void main(String[] args) {// 第二个特点的演示// 2.我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项System.out.println(Season.SPRING);System.out.println(Season.SUMMER);System.out.println(Season.AUTUMN);System.out.println(Season.WINTER);// 第三个特点的演示// 3.每一个枚举项其实就是该枚举的一个对象Season spring = Season.SPRING;}
}

4.枚举的方法
- String name() 获取枚举项的名称
- int ordinal() 返回枚举项在枚举类中的索引值, 枚举项在枚举类中它也是有索引的
- int compareTo(E o) 比较两个枚举项,返回的是索引值的差值
- String toString() 返回枚举常量的名称
- static <T> T valueOf(Class<T> type,String name)
字节码文件对象 枚举项的名称
,它是一个静态方法,获取指定枚举类中的指定名称的枚举值6. values() 获得所有的枚举项
package com.gch.d5_enum.demo3;/**定义枚举类*/
public enum Season {SPRING,SUMMER,AUTUMN,WINTER;
}
package com.gch.d5_enum.demo3;public class EnumDemo {public static void main(String[] args) {// String name() 获取枚举项的名称String name = Season.SPRING.name();System.out.println(name); // SPRINGSystem.out.println("---------------------");// int ordinal() 返回枚举项在枚举类中的索引值int index1 = Season.SPRING.ordinal();int index2 = Season.SUMMER.ordinal();int index3 = Season.AUTUMN.ordinal();int index4 = Season.WINTER.ordinal();// 枚举项在枚举类中它也是有索引的System.out.println(index1); // 0System.out.println(index2); // 1System.out.println(index3); // 2System.out.println(index4); // 3System.out.println("----------------------");// int compareTo(E o) 比较两个枚举项,返回的是索引值的差值int result = Season.SPRING.compareTo(Season.WINTER);System.out.println(result); // 0 - 3 = -3System.out.println("-----------------------");// String toString() 返回枚举常量的名称String s = Season.SPRING.toString();System.out.println(s); // SPRINGSystem.out.println("------------------");// static <T> T valueOf(Class<T> type,String name)// 字节码文件对象 枚举项的名称// 它是一个静态方法,获取指定枚举类中的指定名称的枚举值Season spring = Enum.valueOf(Season.class, "SPRING");System.out.println(spring); // SPRINGSystem.out.println(Season.SPRING == spring); // trueSystem.out.println("--------------------------");// values() 获得所有的枚举项Season[] values = Season.values();for (int i = 0; i < values.length; i++) {System.out.println(values[i]);}}
}
相关文章:
Java枚举详解
一.枚举 1.为什么有枚举? 如果我们的程序需要表示固定的几个值: 比如季节:spring (春),summer(夏),autumn(秋),winter(冬) 用常量表示: public static final int SEASON_SPRING 1;public st…...
虚拟机上安装openKylin详细步骤总结
一、创建虚拟机 首先获取操作系统安装镜像文件: 链接:https://pan.baidu.com/s/1tSuXmDk2ZILR4ieee6iImw?pwdcy47 提取码:cy47 (1-1)进入新虚拟机创建向导,选择“自定义”: (1-…...
夜天之书 #74 企业开源的软件协议模型实践(Part 2)
在上一篇文章中,我介绍了企业开源的完全开放源码策略及其风险。完全开放源码,即以符合开源定义的软件协议发布企业自研软件的情形。本文介绍应对完全开放源码后的风险的第一种策略:提高市场占有率与开放标准。与其说是策略,不如说…...
2.webpack实时打包
简介 上一章已经实现了使用 webpack 构建了一个简单的项目;但是我们发现,每次修改了 index.js 需要重新执行 cnpm run dev 命令重新构建 main.js;这在开发阶段是无法忍受的,因为这样调式将浪费大量的时间;还好 webpac…...
KingbaseES V8R3 表加密
前言 透明加密是指将数据库page加密后写入磁盘,当需要读取对应page时进行加密读取。此过程对于用户是透明, 用户无需干预。 该文档进行数据库V8R3版本测试透明加密功能,需要说明,该版本发布时间早于V8R6,所以只能进行表…...
2 为社么软件架构很重要?
2 为社么软件架构很重要? 啊,建造,建造! 这是所有艺术中最崇高的艺术。 — 亨利沃兹沃思朗费罗 如果架构是答案,那么问题是什么? 本章从技术角度重点介绍架构的重要性。我们将研究面包师的十几个最重要…...
Python 之 Pandas merge() 函数、set_index() 函数、drop_duplicates() 函数和 tolist() 函数
文章目录一、merge() 函数1. inner2. left 和 right3. outer二、set_index() 函数三、drop_duplicates() 函数四、tolist() 函数五、视频数据分析案例1. 问题要求2. 解决过程在最开始,我们先导入常规的 numpy 和 pandas 库。 import numpy as np import pandas as …...
MySQL实战之深入浅出索引(下)
1.前言 在上一篇文章中,我们介绍了InnoDB索引的数据结构模型,今天我们再继续聊一下跟MySQL索引有关的概念。 在介绍之前,我们先看一个问题: 表初始化语句 mysql> create table T ( ID int primary key, k int NOT NULL DEFA…...
(二分查找)leetcode1539. 第 k 个缺失的正整数
文章目录一、题目1、题目描述2、基础框架3、原题链接二、解题报告1、思路分析2、时间复杂度3、代码详解三、本题小知识一、题目 1、题目描述 给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。 请你找到这个数组里第 k 个缺失的正整数。 示例 1: 输入&…...
yaml文件格式详解及实例
🍁博主简介 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 文章目录yaml简介yaml语法规则Yaml语法实例数组…...
AOP在PowerJob中的使用,缓存锁保证并发安全,知识细节全总结
这是一篇简简单单的文章,需要你简简单单看一眼就好,如果有不明白的地方,欢迎留言讨论。 在之前的文章中出现过一次AOP的使用,就是在运行任务之前,需要判断一下,触发该任务执行的server,是不是数…...
对账平台设计
背景 随着公司业务的蓬勃发展,交易履约清结算业务的复杂性也在不断的增高,资金以及各种数据的一致性和准确性也变得越发重要。 以交易链路为例,存在着如下一些潜在的不一致场景: 订单支付成功了,但是订单状态却还是“…...
JavaEE进阶第五课:SpringBoot的创建和使用
上篇文章介绍了Bean 作用域和生命周期,这篇文章我们将会介绍SpringBoot的创建和使用 目录1.为什么要学习StringBoot1.1什么是SpringBoot1.2SpringBoot的优点2.如何用Idea创建SpringBoot项目3.项目目录介绍和运行3.1输入Helloworld结尾1.为什么要学习StringBoot 在前…...
我带过的一名C++实习生——Z同学
刚开始带Z同学,吃饭聊天时,我顺便了解了下他的擅长:linux平台下C、C网络编程。 接下来的实习,主要分为两个阶段:小组公共培训和项目实训。 小组公共培训为期2周,主要学习和了解公司文化制度,讲师…...
面试题13. 机器人的运动范围
面试题13. 机器人的运动范围 难度:middle\color{orange}{middle}middle 题目描述 地上有一个 mmm 行 nnn 列的方格,从坐标 [0,0][0,0][0,0] 到坐标 [m−1,n−1][m-1,n-1][m−1,n−1] 。一个机器人从坐标 [0,0][0, 0][0,0] 的格子开始移动,它…...
LeetCode189_189. 轮转数组
LeetCode189_189. 轮转数组 一、描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,…...
java Files和Paths的使用详解 附有使用demo
前言 Java Files和Paths是Java 7中引入的新API,用于处理文件和目录。Files类提供了许多有用的静态方法来操作文件和目录,而Path类则表示文件系统中的路径。 创建文件和目录 在Java中创建文件和目录非常简单。我们可以使用Files类的createFile()方法和…...
如何使用ApacheTomcatScanner扫描Apache Tomcat服务器漏洞
关于ApacheTomcatScanner ApacheTomcatScanner是一个功能强大的Python脚本,该脚本主要针对Apache Tomcat服务器安全而设计,可以帮助广大研究人员轻松扫描和检测Apache Tomcat服务器中的安全漏洞。 功能介绍 1、支持使用多线程Worker搜索Apache Tomcat服…...
js中的定时器 setTimeout()和setInterval()
JavaScript 定时器,有时也称为“计时器”,用来在经过指定的时间后执行某些任务,类似于我们生活中的闹钟。 在 JavaScript 中,我们可以利用定时器来延迟执行某些代码,或者以固定的时间间隔重复执行某些代码。例如&…...
【吃透Js】深入学习浅拷贝和深拷贝
一、JavaScript数据类型原始类型对象类型二、原始类型和对象类型的区别1.原始类型2.引用类型3.复制4.比较5.值传递三、浅拷贝概念实现方法四、深拷贝概念五、浅拷贝、深拷贝和赋值的区别浅拷贝和赋值六、小结想要真正搞明白深浅拷贝,你必须要熟练掌握赋值、对象在内…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...
图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...
