【JavaSE】Java基础语法(四十六):枚举

news2024/11/28 12:39:39

文章目录

  • 1. 概述
  • 2. 定义格式
  • 3. 枚举的特点
  • 4. 枚举的方法



在这里插入图片描述

1. 概述


枚举是一种特殊的数据类型,它列出了一组预定义的常量,并使用标识符来引用这些常量。枚举的用途很广泛,下面列举了几个常见的应用场景:

  • 管理常量:如果您需要在程序中使用一组固定不变的常量,建议使用枚举来管理这些常量。这样可以使得代码更加可读和易于维护。例如,你可以使用一个代表颜色的枚举,来管理程序中可能需要使用到的所有颜色。

  • 替代布尔值:如果某个函数或方法的返回值只有两种状态,True 或者 False,可以使用枚举来管理只有两种状态的结果,使代码具有更好的可读性和易维护性。枚举可以将 True 和 False 映射到你实际希望表示的含义。

  • 解析字符串:枚举常用于解析字符串并转换为相应的枚举值。对于从外部系统或文件读取的值,而我们必须将它们转换为特定的枚举值,将非常有用。

  • 代替整数常量:在以前,程序员经常使用“幻数”(即硬编码的数字)。现在推荐使用枚举来代替整数常量或“幻数”,这样可以使代码更加可读和易于维护。


2. 定义格式

  • 格式

    public enum s {
    	枚举项1,枚举项2,枚举项3;
    }
    注意: 定义枚举类要用关键字enum
    
  • 示例代码

    // 定义一个枚举类,用来表示春,夏,秋,冬这四个固定值
    public enum Season {
    	SPRING,SUMMER,AUTUMN,WINTER;
    }
    

3. 枚举的特点

  • 特点
    - 所有枚举类都是Enum的子类
    - 我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项
    - 每一个枚举项其实就是该枚举的一个对象
    - 枚举也是一个类,也可以去定义成员变量
    - 枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
    - 枚举类可以有构造器,但必须是private的,它默认的也是private的。
    枚举项的用法比较特殊:枚举(“”);
    - 枚举类也可以有抽象方法,但是枚举项必须重写该方法

  • 示例代码

    public enum Season {
    	SPRING("春"){
    		//如果枚举类中有抽象方法
    		//那么在枚举项中必须要全部重写
    		@Override
    		public void show() {
    			System.out.println(this.name);
    		}
    	},
    	
    	SUMMER("夏"){
    		@Override
    		public void show() {
    			System.out.println(this.name);
    		}
    	},
    
    	AUTUMN("秋"){
    		@Override
    		public void show() {
    			System.out.println(this.name);
    		}
    	},
    
    	WINTER("冬"){
    		@Override
    		public void show() {
    			System.out.println(this.name);
    		}
    	};
    
    	public String name;
    	//空参构造
    	//private Season(){}
    	
    	//有参构造
    	private Season(String name){
    		this.name = name;
    	}
    	//抽象方法
    	public abstract void show();
    }
    
    public class EnumDemo {
    	public static void main(String[] args) {
    		/*
    			1.所有枚举类都是Enum的子类
    			2.我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项
    			3.每一个枚举项其实就是该枚举的一个对象
    			4.枚举也是一个类,也可以去定义成员变量
    			5.枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,
    			但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
    			6.枚举类可以有构造器,但必须是private的,它默认的也是private的。
    			枚举项的用法比较特殊:枚举("");
    			7.枚举类也可以有抽象方法,但是枚举项必须重写该方法
    		*/
    		//第二个特点的演示
    		//我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项
    		System.out.println(Season.SPRING);
    		System.out.println(Season.SUMMER);
    		System.out.println(Season.AUTUMN);
    		System.out.println(Season.WINTER);
    		//第三个特点的演示
    		//每一个枚举项其实就是该枚举的一个对象
    		Season spring = Season.SPRING;
    	}
    }
    

4. 枚举的方法

  • 方法介绍
    在这里插入图片描述

  • 示例代码

public enum Season {
	SPRING,SUMMER,AUTUMN,WINTER;
}

public class EnumDemo {
	public static void main(String[] args) {
		// String name() 获取枚举项的名称
		String name = Season.SPRING.name();
		System.out.println(name);
		System.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);
		System.out.println(index2);
		System.out.println(index3);
		System.out.println(index4);
		System.out.println("-----------------------------");
		// int compareTo(E o) 比较两个枚举项,返回的是索引值的差值
		int result = Season.SPRING.compareTo(Season.WINTER);
		System.out.println(result);//-3
		System.out.println("-----------------------------");
		// String toString() 返回枚举常量的名称
		String s = Season.SPRING.toString();
		System.out.println(s);
		System.out.println("-----------------------------");
		// static <T> T valueOf(Class<T> type,String name)
		// 获取指定枚举类中的指定名称的枚举值
		Season spring = Enum.valueOf(Season.class, "SPRING");
		System.out.println(spring);
		System.out.println(Season.SPRING == spring);
		System.out.println("-----------------------------");
		// values() 获得所有的枚举项
		Season[] values = Season.values();
		for (Season value : values) {
			System.out.println(value);
		}
	}
}

在这里插入图片描述

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

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

相关文章

计算机组成原理---第三章存储系统 习题详解版

&#xff08;一&#xff09;精选课内习题 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 &#xff08;二&#xff09;精选课后习题 1.设有一个具有20位地址和32位字长的存储器&#xff0c;问&#xff1a; (1)该存储器能存储多少个字节的信息&#xff1f; (2)如果存储器由512k8位的SR…

Linux :: vim 编辑器:详解:文本复制/粘贴/剪切/删除 与 撤销普通操作及撤销撤销操作

前言&#xff1a;本篇是 Linux 基本操作篇章的内容&#xff01; 笔者使用的环境是基于腾讯云服务器&#xff1a;CentOS 7.6 64bit。 学习集&#xff1a; C 入门到入土&#xff01;&#xff01;&#xff01;学习合集Linux 从命令到网络再到内核&#xff01;学习合集 前文&#x…

chatgpt赋能python:Python去掉None:提高代码效率,优化SEO

Python去掉None&#xff1a;提高代码效率&#xff0c;优化SEO 作为一名有10年Python编程经验的工程师&#xff0c;我发现Python中会频繁出现None类型的变量。这种情况在代码中一旦过多&#xff0c;就会影响程序的效率&#xff0c;同样也会影响SEO的排名。因此&#xff0c;为提…

【数据仓库架构】什么是 Azure Synapse,它与 Azure Data Bricks 有何不同?

Azure Synapse Analytics 是一项针对大型公司的无限信息分析服务&#xff0c;它被呈现为 Azure SQL 数据仓库 (SQL DW) 的演变&#xff0c;将业务数据存储和宏或大数据分析结合在一起。 在处理、管理和提供数据以满足即时商业智能和数据预测需求时&#xff0c;Synapse 为所有工…

Hive学习---5、文件格式和压缩、企业级调优

1、文件格式和压缩 1.1 Hadoop压缩概述 由于Hive是相当于与Hadoop的客户端&#xff0c;所以hadoop会啥压缩&#xff0c;Hive基本就会啥压缩。 压缩格式算法文件扩展名是否可切分DEFLATEDEFLATE.deflate否GzipDEFLATE.gz否bzip2bzip2.bz2是LZOLZO.lzo是SnappySnappy.snappy否…

word恢复和粘贴按钮变灰色,不可用怎么办?

如果 Word 中的恢复和粘贴按钮变成灰色&#xff0c;可能是由于以下原因之一&#xff1a; 1. 文档处于只读模式。 2. 与 Office 相关的某些组件已损坏或缺失。 3. Word 的文件权限被配置为只读。 以下是一些可能的解决方法&#xff1a; 1. 检查文档是否处于只读模式。 如果是…

随机数发生器设计(三)

随机数发生器设计&#xff08;三&#xff09;- 熵估计和健康测试 熵估计健康测试 熵估计 考虑都熵源的多样性&#xff0c;建立一个通用的熵估计模型比较困难。本文采用nist.sp.800-90B推荐的Markov评估。详见 https://doi.org/10.6028/NIST.SP.800-90B。 执行Markov评估时&am…

chatgpt赋能python:用Python向手机发送信息是如何实现的?

用Python向手机发送信息是如何实现的&#xff1f; 在今天的信息时代&#xff0c;随时随地保持联系已经成为生活不可或缺的一部分。随着技术的发展&#xff0c;我们可以使用各种方式发送和接收信息&#xff0c;而使用Python向手机发送短信是其中一种非常方便的方式。 Python的…

I.MX6ull EPIT定时器

一 简介 EPIT定时器是一种增强的周期中断定时器&#xff0c;完成周期性中断定时的功能。 具有以下特点 EPIT定时器是一个32位的定时器 时钟源可选的向下计数器 EPIT 共有 3 个时钟源可选择&#xff0c;ipg_clk、ipg_clk_32k 和 ipg_clk_highfreq 当计数值和比较值相等的时候…

兼顾性能+实时性处理缓冲数据解决方案

我们经常会遇到这样的数据处理应用场景&#xff1a;我们利用一个组件实时收集外部交付给它的数据&#xff0c;并由它转发给一个外部处理程序进行处理。考虑到性能&#xff0c;它会将数据存储在本地缓冲区&#xff0c;等累积到指定的数量后打包发送&#xff1b;考虑到实时性&…

ChatGPT与软件架构(3) - 软件架构提示工程

高效利用ChatGPT辅助研发的关键是在研发生命周期的不同阶段采用对应提示获取有益的帮助。原文: Leveraging Prompt Engineering in Software Architecture with ChatGPT 软件架构开发生命周期转型。 Beth Smith Unsplash 简介 作为解决方案架构师&#xff0c;有必要掌握软件架构…

【分布式架构】资源与事务:可观测性的基本二重性

西格曼&#xff1a;我叫本西格曼。我是Lightstep的联合创始人兼首席执行官。我在这里讨论的是资源和事务&#xff0c;这是可观察性的一个基本的二元性。我职业生涯的大部分时间都在研究可观察性。在我职业生涯之初&#xff0c;我在谷歌工作了九年&#xff0c;致力于谷歌的分布式…

SLAM实战项目(1) — ORB-SLAM2稠密地图重建

目录 1 整体思路 2 功能实现 3 结果运行 (1) TUM数据集下载 (2) associate.py用于RGB和Depth匹配 (3) 运行数据集 4 CMakeLists.txt文件修改 5 完整PointCloudMapping.h和PointCloudMapping.cc 6 报错分析 7 思考扩展 文章参考部分开源代码和报错文章 1 整体思路 利…

【微信小程序开发】第 3 节 - 安装开发者工具

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、微信开发者工具 3、下载 4、安装 5、扫码登录 6、设置外观和代理 7、总结 1、缘起 开发微信小程序从大的方…

吊打面试官的16000字JVM专属秘籍,又一个Java面试神器!终于可在简历写上精通JVM了!

前言 吊打面试官的16000字JVM专属秘籍&#xff0c;总共包含三部分的内容&#xff0c;从基础到进阶带大家一步步深入理解JVM&#xff01; 学完就可以在简历上面直接写上精通JVM&#xff01; 因为篇幅限制这里只给大家做简单的一个介绍&#xff0c;也就是进行一个大点的梳理&a…

记录--手把手教你Vue+ECharts+高德地图API实现天气预报数据可视化

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 所谓数据可视化&#xff0c;我们可以理解为从宏观角度来看一眼就能看出来整个数据的占比&#xff0c;走向。对于数据可视化&#xff0c;很多互联网公司是很看重这一块的&#xff0c;包括大厂&…

基于wireshark打造安全分析师工具--解析suricata中的分析结果

从本篇文章开始&#xff0c;我将通过若干篇文章陆续介绍在实际安全运营的过程中&#xff0c;基于wireshark打造安全分析师趁手的流量威胁分析工具&#xff0c;帮助安全分析人员在面对网络数据包取证和分析时候达到事半功倍的效果。本篇文件介绍使用在使用iwreshark分析数据包事…

21天学会C++:Day7----auto关键字

CSDN的uu们&#xff0c;大家好。这里是C入门的第七讲。 座右铭&#xff1a;前路坎坷&#xff0c;披荆斩棘&#xff0c;扶摇直上。 博客主页&#xff1a; 姬如祎 收录专栏&#xff1a;C专题 目录 1. 知识引入 2. auto的使用 2.1 auto与指针和引用结合起来使用 2.2 在同一…

区分序列/UIO/特征集示例

区分序列/UIO/特征集示例 从确定性有限状态机进行测试&#xff1a;检查状态 概述 让我们假设我们有一个状态集 S 的 FSM M。还假设我们知道通过转换 t 达到的当前状态是 s 或 s0。 我们如何确定 t 到达了哪个状态&#xff1f; 分离状态 输入序列 w 将两个状态 s 和 s0 分开&…

C++进阶之继承

文章目录 前言一、继承的概念及定义1.继承概念2.继承格式与访问限定符3.继承基类与派生类的访问关系变化4.总结 二、基类和派生类对象赋值转换基本概念与规则 三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员六、复杂的菱形继承及菱形虚拟继承七、…