15.枚举

news2024/10/6 2:25:38

枚举

枚举是Java1.5引入的新特性,通过关键字enum来定义枚举类。枚举类是一种特殊类,它和普通类一样可以使用构造方法、定义成员变量和方法,也能实现接口,但枚举类不能继承其他类。枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在曰常生活中很常见,例如一个人的性别只能是“男”或者“女”,一周的星期只能是 7 天中的一个等。类似这种当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型。

一、声明枚举

声明枚举时必须使用 enum 关键字,然后定义枚举的名称、可访问性、基础类型和成员等。

//声明性别枚举
public enum SexEnmu {
	man,woman;

}

任意两个枚举成员不能具有相同的名称,且它的常数值必须在该枚举的基础类型的范围之内,多个枚举成员之间使用逗号分隔。
注意:如果没有显式地声明基础类型的枚举,那么意味着它所对应的基础类型是 int。

二、使用枚举

可以通过枚举类型名直接引用常量。

public static void main(String[] args) {
		System.out.println(SexEnmu.man);
	}

三、枚举的常用方法

values() :该方法可以将枚举类型成员以数组的形式返回。

public enum Test_enum {

	SPRING, SUMMER, AUTUMN, WINTER;
}
public static void main (String[] args) {
		Test_enum[] t=Test_enum.values();
		for (int i = 0; i < t.length; i++) {
			System.out.println(t[i]);
		}
	}

在这里插入图片描述

三、枚举的常用方法

values() :该方法可以将枚举类型成员以数组的形式返回。

public enum Test_enum {

	SPRING, SUMMER, AUTUMN, WINTER;
}
public static void main (String[] args) {
		Test_enum[] t=Test_enum.values();
		for (int i = 0; i < t.length; i++) {
			System.out.println(t[i]);
		}
	}

在这里插入图片描述
valueOf()与compareTo():枚举类型中静态方法valueOf()可以实现将普通字符串转换为枚举实例,而compareTo()方法用于比较两个枚举对象在定义时的顺序。

public enum Test_enum {

	SPRING, SUMMER, AUTUMN, WINTER;
}
public static void main (String[] args) {
		
		Test_enum te=Test_enum.valueOf("SUMMER");
		System.out.println(te.compareTo(Test_enum.valueOf("SPRING")));
		System.out.println(te.compareTo(Test_enum.valueOf("SUMMER")));
		System.out.println(te.compareTo(Test_enum.valueOf("AUTUMN")));
	}

在这里插入图片描述
说明:调用compareTo()方法返回的结果,正值代表方法中的参数在调用该方法的枚举对象位置之前;0代表两个相互比较的枚举成员的位置相同;负值代表方法中参数在调用该方法的枚举对象位置之后。
ordinal():该方法用于得到枚举成员的位置索引。

public enum Test_enum {

	SPRING, SUMMER, AUTUMN, WINTER;
}
public static void main (String[] args) {
		Test_enum[] t=Test_enum.values();
		for (int i = 0; i < t.length; i++) {
			System.out.println(t[i]+"的索引位置"+t[i].ordinal());
		}
}

在这里插入图片描述

四、枚举的特点

枚举类型声明提供了一种用户友好的变量定义方法,枚举了某种数据类型所有可能出现的值。总结枚举类型,它具有以下特点:

  • 类型安全。
  • 紧凑有效的数据定义。
  • 可以和程序其他部分完美交互。
  • 运行效率高。

五、枚举的应用

枚举在switch中的应用:在枚举类型中,因枚举的内容元素是常量,所以可以应用到switch语句中。

public enum dome_enum {

	星期一,
	星期二,
	星期三,
	星期四,
	星期五,
	星期六,
}
public static void main(String[] args) {
		dome_enum de=dome_enum.星期一;
		switch (de) {
		case 星期一:
			break;
		case 星期二:
			break;
		case 星期三:
			break;
		case 星期四:
			break;
		case 星期五:
			break;
		case 星期六:
			break;
		default:
			break;
		}
	}

枚举中的构造方法:在枚举类型中,可以添加构造方法,但是规定这个构造方法必须为private修饰符修饰。

public enum Test_enum {

	SPRING(1,"春天"), SUMMER(2,"夏天"), AUTUMN(3,"秋天"), WINTER(4,"冬天");
	
	private int id;
	private String name;
	
	
	private Test_enum() {
	}


	private Test_enum(int id, String name) {
		this.id = id;
		this.name = name;
	}


	public int getId() {
		return id;
	}


	public void setId(int id) {
		this.id = id;
	}


	public String getName() {
		return name;
	}


	public void setName(String name) {
		this.name = name;
	}
	
	
	
}

public static void main (String[] args) {
		Test_enum[] t=Test_enum.values();
		for (int i = 0; i < t.length; i++) {
			System.out.println(t[i].getId()+"的名称"+t[i].getName());
		}
}

在这里插入图片描述
枚举中实现接口:枚举是一种特殊的类,那么它可以实现接口,并且每个元素都可以实现接口中的方法。

public interface IEnumService {

	public void say();
}

public enum Test_enum implements IEnumService{

	SPRING{
		public void say() {
			System.out.println("我是春天");
		}
	}, 
	SUMMER{
		public void say() {
			System.out.println("我是夏天");
		}
	}, 
	AUTUMN{
		public void say() {
			System.out.println("我是秋天");
		}
	}, 
	WINTER{
		public void say() {
			System.out.println("我是冬天");
		}
	};

	
}


public static void main (String[] args) {
		Test_enum[] t=Test_enum.values();
		for (int i = 0; i < t.length; i++) {
			t[i].say();
		}
}

在这里插入图片描述

六、枚举的用途

枚举中存储的常量,因其独有的特性,能够完成固定的内容的描述,比如一年有四季,一天有24小时,常应用于比如错误码,信息码等。同时,枚举还可以实现接口,常用于固定接口的不同类型不同处理的情况。

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

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

相关文章

Linux系统下安装zookeeper教程

将下载好的zookeeper上传到linux服务器上&#xff0c;这里使用的是FileFilla 解压&#xff1a;[rootcentos7964 software]# tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz 进入刚刚解压后的文件夹&#xff0c;创建一个名字为data的文件夹&#xff0c;如下&#xff1a; [rootc…

分库分表--shardingjdbc

文章目录前言一、shardingjdbc简介作用二、如何使用1.我有个表现在体量太大了,我想做分库分表2.开始改造1 引入shardingjdbc2 更改yml文件3 测试看效果3.旧数据迁移4.其他分库类型5 部分配置说明总结前言 当项目开始的时候,没有想到后续的分库分表的话,其实对于后续的分库分表…

MYSQL学习 - DDL数据库操作

前言 从今天开始, 健哥就带各位小伙伴学习数据库技术。数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程由浅入深, 全面讲解数据库体系。 非常适合零基础的小伙伴来学习。 ------------------------------前戏已做完&#xff0c;精彩即开始---…

【数据结构】树和二叉树——堆

目录 &#x1f349;一.树的概念及结构&#x1f349; 1.树的概念 2.树的相关术语 3.树的表示 4.树在实际中的应用 &#x1f34a;二.二叉树的概念和结构&#x1f34a; 1.二叉树的概念 2.特殊的二叉树 2.1.满二叉树 2..2.完全二叉树 3.二叉树的性质 4.二叉树的存储结构 …

限流算法(计数器、滑动时间窗口、漏斗、令牌)原理以及代码实现

文章目录前言1、计数器&#xff08;固定时间窗口&#xff09;算法原理代码实现存在的问题2、滑动时间窗口算法原理代码实现存在的问题3、漏桶算法原理代码实现存在的问题4、令牌桶算法原理代码实现最后本文会对这4个限流算法进行详细说明&#xff0c;并输出实现限流算法的代码示…

一文了解Java ArrayList (源码逐行解析)

介绍 ArrayList 是最常用的 List 实现类&#xff0c;内部是通过数组实现的&#xff0c;它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔&#xff0c;当数组大小不满足时需要增加存储能力&#xff0c;就要将已经有数组的数据复制到新的存储空间中。当从 Arr…

c++积累5-lock_guard使用

1、std:mutex 在了解lock_guard之前&#xff0c;需要先学习下std:mutex,因为lock_guard内部就是使用的std:mutex std:mutex&#xff1a;是一个用于保护共享数据不会同时被多个线程访问的类&#xff0c;它叫做互斥量。我们可以把它看作一把锁&#xff0c;基本使用如下&#xff…

【致敬未来的攻城狮计划】— 连续打卡第四天:e2 studio 使用教程

系列文章目录 1.连续打卡第一天&#xff1a;提前对CPK_RA2E1是瑞萨RA系列开发板的初体验&#xff0c;了解一下 2.开发环境的选择和调试&#xff08;从零开始&#xff0c;加油&#xff09; 3.欲速则不达&#xff0c;今天是对RA2E1 基础知识的补充学习。 文章目录 系列文章目录 文…

Flutter成不了“顶流明星”的7大理由

Flutter是一款由Google推出的跨平台移动应用开发框架&#xff0c;近年来备受关注。尽管Flutter在某些方面表现出色&#xff0c;但仍然有一些人对它的发展前景表示怀疑。近期一些文章针对Flutter的发展提出了不少质疑和批评&#xff0c;称其难以成为移动应用开发的“顶流明星”&…

【计算机网络—— 安装packet tracer的教程,管理MAC地址和配置路由器的实验步骤以及心得体会】

文章目录安装packet tracer的教程管理MAC地址实验目的 &#xff1a;管理MAC地址实验内容及过程记录&#xff08;一&#xff09;运行Cisco Packet Tracer软件&#xff08;二&#xff09;选择PC终端&#xff08;三&#xff09;运行终端&#xff08;四&#xff09;按表内容对交换机…

Spring Cloud Nacos使用总结

目录 安装Nacos服务器 服务发现与消费 服务发现与消费-添加依赖 服务发现-配置文件 服务发现-注解 服务发现-Controller 服务消费-配置文件 服务消费-注解与Ribbon消费代码 服务消费-运行 配置管理 配置管理-添加依赖 配置管理-配置文件 配置管理-注解 配置管理-…

Raft一致性算法(精简和扩展)

raft一致性算法 文章目录raft一致性算法一、raft简介1.1 raft涉及到的名词1.2 Rpc请求1.3 复制状态机二、raft⼀致性算法2.0 摘要2.0.1 所有服务器需遵守的规则2.0.2 跟随者2.0.3 候选⼈2.0.4 领导人2.0.5 状态2.0.6 特性2.1 raft基础2.2 leader选举2.2.1 集群启动时选举2.2.2 …

微电网两阶段鲁棒优化经济调度方法(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

清华大学ChatGLM-6B部署运行

一、模型介绍 开源项目&#xff1a; GitHub - THUDM/ChatGLM-6B: ChatGLM-6B&#xff1a;开源双语对话语言模型 | An Open Bilingual Dialogue Language Model ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型&#xff0c;基于 General Language Model (GLM) 架构&…

PLC高精度定时器(T法测速功能块)

S7-200 SMART PLC时间间隔指令BGN_ITIME,和CAL_ITIME采用的是系统自带的1ms高精度定时器,PLC里只能调用一次。T法测速和M法测速应用时,都需要高精度时序定时器的支持(当然你也可以采用定时中断的方式获取高精度时序),时间间隔指令请参看下面的博客文章: SMART PLC时间间…

keil5使用c++编写stm32控制程序

keil5使用c编写stm32控制程序一、前言二、配置图解三、std::cout串口重定向四、串口中断服务函数五、结尾废话一、前言 想着搞个新奇的玩意玩一玩来着&#xff0c;想用c编写代码来控制stm32&#xff0c;结果在keil5中&#xff0c;把踩给我踩闷了&#xff0c;这里简单记录一下。…

FlinkSQL的Watermark机制和Checkpoint机制

Watermark机制 Watermark机制&#xff0c;就是水印机制&#xff0c;也叫做水位线机制。就是专门用来解决流式环境下数据迟到问题的。 MonotonousWatermark&#xff08;单调递增水印&#xff09; package day05;import lombok.AllArgsConstructor; import lombok.Data; impor…

【谷粒商城之JSR303数据校验和集中异常处理】

本笔记内容为尚硅谷谷粒商城JSR303数据校验和集中异常处理部分 目录 一、简介 二、SR303数据校验使用步骤 1、引入依赖 2、给参数对象添加校验注解 常见的注解 3、接口参数前增加Valid 开启校验 三、异常的统一处理 四、分组解决校验 1、创建Groups 2、添加分组 …

MySQL数据库之表的增删改查(进阶)

目录1. 数据库约束1.1 约束类型1.2 NULL约束1.3 UNIQUE&#xff1a;唯一约束1.4 DEFAULT&#xff1a;默认值约束1.5 PRIMARY KEY&#xff1a;主键约束1.6 FOREIGN KEY&#xff1a;外键约束1.7 CHECK约束2 表之间的关系2.1 一对一2.2 一对多2.3 多对多3 新增4 查询4.1 聚合查询4…

Redis一致性问题

&#xff08;1&#xff09;何为一致性&#xff1f; 1、定义&#xff1a; 指系统中各节点数据保持一致。 分布式系统中&#xff0c;可以理解为多个节点中的数据是一致的。 2、分类&#xff1a; 强一致性&#xff1a;写进去的数据是什么&#xff0c;读出来的数据就是什么。弱一…