Java Enum学习笔记

ABAP 平台下配置 OAuth 2.0 Authorization Code 授权类型的完整指引 本文是面向ABAP管理员和SAP开发者的OAuth 2.0授权码配置实战指南。文章详细介绍了在ABAP平台启用Authorization Code的完整流程,包括前置条件检查(如TLS配置和系统用户准备)、SOAUTH2事务码中各字段配置要点(授权类型启用、Redirect URI设置、授权码有效期等)、Scope分配规则以及验证方法。通过一个销售订单OData接口的实际案例,说明了如何将抽象规范转化为具体配置。最后提供了多种验证方式(事务码测试、端点测试和Postman测试)以及关键配置参数(如授权码有效 阅读详情

Java enum学习笔记


一. 什么是enum

enum是Java SE5中新增加的关键字,用来声明一个枚举类型集。在enum没有加入到Java之前,对于枚举一个有限集合的一般做法是创造一个整型的常量集。创造整型常量级的做法会带来一定的风险,即我们没有办法控制集合中的合法元素。比如用整数1到5表示5个状态,但是在调用某一含有状态整数的方法是,输入整数参数6并不会造成编译错误,然而在运行的时候则会产生异常。enum的加入使得程序可以在编译的时候就有效的进行类型控制,确保在需要的地方使用的都是集合中定义的元素。

enum的基本定义格式如下:

public enum EnumDemo {
	ELEMENT_A, ELEMENT_B, ELEMENT_C
}

其中所有枚举类型均用大写标注,不同enum之间用逗号隔开。


二. enum的实质

编译上述enum例子生成EnumDemo.class,然后使用javap命令,我们就能获得JVM对于enum编译后的文件大概。如下为EnumDemo.class的大致内容:

public final class EnumDemo extends java.lang.Enum{
    public static final EnumDemo ELEMENT_A;
    public static final EnumDemo ELEMENT_B;
    public static final EnumDemo ELEMENT_C;
    static {};
    public static EnumDemo[] values();
    public static EnumDemo valueOf(java.lang.String);
}
所以我们可以看出:

1. EnumDemo在编译后是一个继承了java.lang.Enum类的public final class。

2. 所有列举的元素都是都是一个EnumDemo的对象。

3. EnumDemo类除了继承了Enum类的所有方法以外,JVM在编译的时候还插入了values()方法,并且重载了valueOf()方法。


综上所述,enum的实质是一个继承Enum类的final类,它包含了所有列举出的以其本身为类型的静态final对象元素(枚举元素)。它除了继承Enum的方法外,还被JVM添加了values和valueOf方法。


当然我们还可以为enum添加新的方法,自定义enum的构造函数,以及让列举的元素覆盖enum中定义的方法。如下的枚举类型Language就展示enum更丰富的定义。每一个Language枚举元素包含了使用国家和使用人口总数属性,Language还重新覆盖了Enum中的toString方法。在CHINESE这个元素中,它又重写了Language中定义的toString方法。代码如下:

package enumTest;

public enum Language {
	CHINESE(/* constructor parameters */"China", 1.2d) {
		/* overrided method */
		@Override
		public String toString() {
			return "CHINESE";
		}
	},
	JAPANESE("Japan", 0.1d), ENGLISH("England", 0.03d), FRENCH("France", 0.05d), GERMAN(
			"Germany", 0.06d);

	private String country;
	private double population;

	private Language() {

	}

	private Language(String country, double population) {
		this.country = country;
		this.population = population;
	}

	public String getCountry() {
		return country;
	}

	public double getPopulation() {
		return population;
	}

	enum Level {
		BEGINNER, MIDDLE_LEVEL, ADEVENCED
	}

	@Override
	public String toString() {
		String s = this.name();
		String lower = s.substring(1).toLowerCase();
		return s.charAt(0) + lower;
	}
}


三. enum的应用(包含EnumSet和EnumMap的使用)

enum最值得注意的应用就是它可以在switch语句中被使用,这样我们就可以轻松地处理不同枚举情况。
另外针对enum类型,我们可以使用相关的EnumSet和EnumMap来保存信息。EnumSet只允许包含某个enum类型的对象,EnumMap的限制在于key type只能是某个enum类型。

以下是一个应用上述Language枚举类小例子,基本展现enum的各方面使用:
package enumTest;

import static enumTest.Language.CHINESE;
import static enumTest.Language.Level.ADEVENCED;
import static enumTest.Language.Level.BEGINNER;
import static enumTest.Language.Level.MIDDLE_LEVEL;

import java.util.EnumMap;
import java.util.EnumSet;
import java.util.Map.Entry;

public class LearningLanguage {

	public static void main(String[] args) {
		Student st = new Student("XiaoZhang", CHINESE);
		st.learn(Language.JAPANESE);
		st.learn(Language.ENGLISH);
		st.learn(Language.FRENCH);
		st.passExame(Language.ENGLISH);
		st.practise(Language.FRENCH);
		System.out.println(st.languageAbility());
	}

}

class Student {
	private String name;
	private Language motherTongue;
	private String nationality;
	private EnumSet<Language> learningLanguage;
	private EnumMap<Language, Language.Level> languageLevel;

	public Student(String name, Language motherTongue) {
		this.name = name;
		this.motherTongue = motherTongue;
		setNationality();
		learningLanguage = EnumSet.noneOf(Language.class);
		languageLevel = new EnumMap<Language, Language.Level>(Language.class);
		languageLevel.put(this.motherTongue, ADEVENCED);
	}

	private void setNationality() {
		switch (this.motherTongue) {
		case CHINESE:
			this.nationality = "Chinese";
			break;
		case JAPANESE:
			this.nationality = "Japanese";
			break;
		case ENGLISH:
			this.nationality = "English";
			break;
		case FRENCH:
			this.nationality = "French";
			break;
		case GERMAN:
			this.nationality = "German";
			break;
		}
	}

	public void learn(Language language) {
		this.learningLanguage.add(language);
		languageLevel.put(language, BEGINNER);
	}

	public void passExame(Language language) {
		languageLevel.put(language, MIDDLE_LEVEL);
	}

	public void practise(Language language) {
		this.learningLanguage.remove(language);
		languageLevel.put(language, ADEVENCED);
	}

	public String languageAbility() {
		StringBuffer sb = new StringBuffer();
		sb.append(this.name + " speaks " + motherTongue
				+ " as mother language.\n" + this.name + "'s nationality is "
				+ this.nationality + ".  \n\n");
		sb.append(this.name + " is learning ");
		for (Language lg : learningLanguage) {
			sb.append(lg.toString() + " ");
		}
		sb.append(". \n\n");
		sb.append(this.name + "'s language ability is shown as belows: \n");

		StringBuffer tmp = new StringBuffer();
		double total = 0d;
		for (Entry<Language, Language.Level> entry : languageLevel.entrySet()) {
			if (entry.getValue() != null) {
				sb.append(entry.getKey().toString() + " : "
						+ entry.getValue().toString() + " \n");
				tmp.append(entry.getKey().getCountry() + " ");
				total = total + entry.getKey().getPopulation();
			}
		}

		sb.append("\n" + this.name + " can travel in " + tmp.toString()
				+ ". And he can speak with " + String.format("%.2f", total)
				+ " billion people");
		return sb.toString();
	}
}

输出:
XiaoZhang speaks CHINESE as mother language.
XiaoZhang's nationality is Chinese.  

XiaoZhang is learning Japanese English . 

XiaoZhang's language ability is shown as belows: 
CHINESE : ADEVENCED 
Japanese : BEGINNER 
English : MIDDLE_LEVEL 
French : ADEVENCED 

XiaoZhang can travel in China Japan England France . And he can speak with 1.38 billion people



Mac安装Claude Code的3种方式及5类报错解决方案 介绍在Mac上安装Claude Code的3种实测可行方式(官方dmg、Homebrew+ARM原生构建、Docker容器化),并针对Gatekeeper签名验证失败、Rosetta 2内存对齐崩溃、Python ABI兼容性冲突等5类高频报错提供根因分析与可复现解决方案,覆盖M1–M3及Intel 阅读详情

相关推荐

matlab球面投影(二)

matlab球面投影,想做一个全景相机,不知道,要做成啥样,于是在MATLAB先仿真一下,看下是个啥样子 百度别人做的,复制下面的代码到MATLAB的命令串口下,,网上找了张全景图,可以是bmp,jpg,改程序就可以了 回车运行就可以看到结果。 复制下面代码时,下面的中文注释记得删除,MATLAB是会报错的, close all; clear all; clc [x,y,z]=sphere(50); A=imread('a.JPG'); //名字是自己命名的,记得改 B=warp(x,y,-z,

rjszcb的博客 3161

Java枚举(Enum)详细讲解与使用

本文介绍了枚举类的概念、Java5怎么产生的、用法、以及例子。

weixin_52176709的博客 1665

camera——HAL层知识分享

CameraHAL层是Android相机系统的核心中间层,负责连接Framework层与硬件驱动层。它通过标准化接口解耦软硬件,实现跨平台兼容性,同时为厂商提供硬件定制空间。主要功能包括:设备管理、数据流处理、参数控制以及图像优化。关键子系统涵盖预览、拍照、录像、对焦与曝光等模块,采用HAL3的"请求-响应"模型实现精细控制。性能优化重点关注启动时间、帧率稳定性和延迟控制。通过分层架构设计(接口层-核心层-适配层)和缓冲池机制,确保高效数据传输和硬件资源调度。

2302_77429403的博客 2074

【Java学习笔记】8:Java枚举和枚举类

枚举可以对类似的相同类型的对象同时进行声明,在程序中调用这些元素时,不会出现混淆或重复。 枚举的定义形式如下: enum 枚举名{枚举值表}; 设有变量a、b、c被说明为上述的weekday,可采用下面三种方式: enum weekday{sun,mon,tue,wed,thu,fri,sat}; enum weekday a,b,c; 或者 enum weekday{sun,mon

大桔骑士的学习笔记 4530

【PCL 特征】积分图法线估计

本文介绍了基于积分图的有序点云法线估计方法。通过利用点云数据的行列式结构特性,该方法避免了传统KD树搜索,采用积分图将邻域统计运算复杂度从O(k²)降至O(1)。详细阐述了四种法线估计算法:协方差矩阵法(精度最高)、平均3D梯度法(实时性好)、平均深度变化法(适合SLAM)和简单3D梯度法(速度最快)。重点分析了积分图构建、动态窗口平滑处理、法线方向调整等关键技术,并提供了PCL实现代码示例。实验表明,不同方法在精度和速度上存在显著差异,可根据具体应用场景选择合适算法。

yijiujiusan的博客 276

Pytorch实现之SRGAN+CBAM的结构设计

在SRGAN的残差连接中加入了CBAM注意力机制,同时设计了四类损失来训练。

LJ1147517021的博客 571

java enum(枚举)使用详解 + 总结

JDK1.5引入了新的类型——枚举。在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便。 接下来,我以自定义的枚举类LightsEnum.java和LightsEnumWithValue.java来介绍一下枚举类的使用。 LightsEnum.javapackage enums; public enum LightsEnum { RED, YELLOW, GREEN }用

Elena专栏 4526

am62x A53与R5F通信

AM62x是Ti的一款异构多核芯片。remoteproc驱动,硬编码(写死)了R5F/M4F固件的名字,这样驱动启动时,就会找硬件编码的固件,下面是其对应关系。值得注意的是,linux内核中的M4F remoteproc驱动启动M4F,而linux内核中的R5F remoreteproc驱动不启动R5F,相反,它attach到已经在boot阶段启动的R5F固件上。在/lib/firmware的真实固件名:,而我们生成的固件名如下所示,没有直接对应的,经确认,.out文件就是我们需要的,重命名后即可。

鹰之翔 1361

Java Enum 学习

Java Enum 学习1.       关于Java Enum:学过C/C++等语言的人,应该都对Enum类型略知一二。Enum一般用来表示一组相同类型的常量。如性别、日期、月份、颜色等。对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用”==”来替换e

abing37的专栏 3万+

R语言机器学习算法实战系列(十一)MLP算法分类器 (Multi-Layer Perceptrons)

本文介绍了多层感知器(MLP)分类算法的原理和计算步骤,并通过R语言实现MLP模型。MLP是一种前馈神经网络,包含输入层、隐藏层和输出层,通过激活函数引入非线性,利用前向传播和反向传播进行训练。文章详细描述了数据预处理、数据切割、模型构建、预测和评估等步骤,并提供了乳腺癌数据集(BreastCancer_clean.csv)的下载链接。通过R包如neuralnet和caret,读者可以逐步实现MLP模型,并评估其分类性能。

专注生信领域 933

【某音电商】protobuf聊天协议逆向

某音电商私信、聊天消息protobuf协议逆向分析与解析

吴秋霖的博客 2315

java 枚举的学习和使用

最近在看别人的代码的时候,经常会看到有使用到枚举的地方,但是在自己写的时候,也有想到过用枚举,但是对什么时候使用枚举和 常量 没有一个明确的概念,比较模糊。所以特别整理了一下有关枚举的知识,以供学习使用。1.什么java 的枚举类型以我的理解答:枚举是我们自己定义的一个集合,比如说我们数学里面所学的集合A={1、2、3},当我们要使用A这个集合的时候,我们只能够使用集合A里面的1、2、3这三个元素,

android_小路的博客 1202

十年芯片资深IC设计工程师面经系列(四)SDC约束

set_driving_cell:当我们的设计是模块级(Block level)的design时,我们的设计前面一般还有其他的设计,那么前面模块的输出便是我们模块的输入,5.1set_false_path:可以单独的时钟或者路径进行约束。set drive :当我们的设计是芯片级(Chip level)的顶层设计时,芯片外围电路要驱动的是负载较大的IO单元,故需要的驱动能力较强,:set_load 是指output端口的负载,设置的值会影响输出到端口的net上的电容,从而影响相应的路径延时。

weixin_47349046的博客 1773

JAVA enum学习笔记

package jie.com;public enum Action { TURN_LEFT, TURN_RIGHT, SHOOT }//枚举实际上也是一个类,所以编译完成后,会产生一个Action.class的类文件.package jie.com;public class EnumDemo { /**  * @param args  */ public static v

我走我路... 743

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java5 学习笔记3——Enum

 我觉得Enum的基本功能,就是作为final static字段的替代品吧,的确让代码抽象程度提高了,也方便维护了,不过Enum的功能绝不限于此,既然是在新时期下出现的枚举,自然要比起C++前辈有突破才不会挨骂 一开始用Enum,潜意识里总是和final static和C++的联系起来,其实除了功能有些相似外,Java的Enum有很多功能亮点,不过受到传统思维影响,最容易犯的一个错误是:把En

王程斯的专栏 1073

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Java学习笔记之Enum枚举(1)

Java学习笔记之Enum枚举(1)前言最基本的用法了解Java中的Enum后记链接 前言 这是在学习Java过程中对自己遇到并得以解决的问题的一些记录,一方面是记录下来方便自己以后查询,一方面希望能帮到有同样疑惑的初学者!本文章参考了博主山高人为峰的文章和java官方文档(我使用的JavaSE8)并结合了自己的心路历程。 最基本的用法 在认识到Enum同样是一个标准Java类之前我们可以把枚举当成是一个和C语言中枚举一样的数据类型,只需要加上Java中的标识符private即可。举例: import ja

zixinHUST的博客 328

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java:Effective java学习笔记之 用enum代替int常量

Java 用enum代替int常量用enum代替int常量1、用enum构建2、enum枚举常量与数据关联3、枚举常量与行为关联4、枚举策略模式5、总结参考 用enum代替int常量 在枚举类型出现之前,一般都常常使用int常量或者String常量表示列举相关事物。如: public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static final int APPLE_GRANNY_S

JMW1407的博客 740

Java学习笔记——枚举Enum

本人学习枚举的小小总结吧。 关键词enum是JDK5新引入的一个特性。枚举对于开发提供了很多的便利。 首先看一下什么是枚举吧,在Java编程思想中定义,关键词enum可以将一组具名的值的有限集合创造为一种新的类型。 个人理解,枚举就是已经实例化了有限个的类,并且可以定义类的数据和行为。 与普通类的区别,枚举无法继承其他类,因为已经继承Enum类,同样也可以实现多个接口,在枚举类中可以声明抽...

Julian_1的博客 456

java学习笔记 switch中使用枚举enum

学习枚举前,switch中可以放得是int,char,byte,short四种类型,枚举enum也是可以和switch一块搭配使用的 代码如下: import java.util.Random; /** * Created by charleszhu on 14-2-14. */ public class TestSwichEunm { public static void

Little__ZM 我愿意付出所有来换一个时光机 1720

Java学习笔记——枚举类enum

参考: https://www.runoob.com/java/java-enum.html https://www.cnblogs.com/junFignting/p/14671771.html 枚举类 1.定义格式 Java 枚举类是一个特殊的类,一般表示一组常量。它使用 enum 关键字来定义,各个常量使用逗号 , 来分割,例子如下: enum Color { RED, GREEN, BLUE; } 每个枚举都是通过 Class 在内部实现的,且所有的枚举值都是 public sta

Jane的博客 241

枚举(enum)详解与用途-Java学习笔记

目录一、需要了解的知识点二、枚举的本质三、枚举的用途:三、总结 一、需要了解的知识点 枚举:在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数(来源:百度百科),说人话就是:枚举用来表示事物固定的有限种类型,是固定的多个常量对象的集合。 二、枚举的本质 下面我们使用一个例子对枚举的本质进行解释说明 测试源代码如下:enum Seaso...

qq_40086115的博客 779

Java 枚举(enum)学习笔记

enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Serializable 和 java.lang.Comparable 两个接口。Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。每个枚举都是通过 Class 在内部实现的,且所有的枚举值都是 public static final 的。values(), ordinal() 和 valueOf() 方法。

一个好知识的传播者 338

java之枚举类 Enum学习笔记

某些情况下,一个类的对象是有限并且固定的,比如季节类,只有四个对象。这种实例有限并且固定的类,为枚举类。 如何手动实现一个枚举类? 规则如下:      (1)通过private将构造器隐藏起来     (2)把这个类所有可能的实例都使用public static final 修饰的类变量来保存 举个例子: public class Season {

Genius_zz的博客 899

Java学习笔记-枚举(enum)

Java学习笔记-枚举(enum)

2301_76198735的博客 239

java学习笔记-java中enum的使用与分析

示例: public enum EnumTest {      FRANK("The given name of me"),      LIU("The family name of me");      private String context;      private String getContext(){      return this.context;     

Un_Believable的博客 317

java学习笔记57--枚举类型(enum)

JDK1.5增加了枚举类型,可以使用enum来定义 例如: public enum Gender{ MALE,FEMALE; } 其中每一个枚举元素都是该枚举类型的一个实例,并且默认是用public static final修饰的 1)枚举类型和类的关系 把Gender.class反编译后显示如下: public...

onepiece_loves的博客 220
上一篇: Java I/O学习笔记
下一篇: Spring boot日志配置笔记
AlainGogogo
博客等级 码龄18年 5粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值