java枚举类的定义,使用,本质

Java面向对象(高级)-- 枚举类的使用 阅读详情

关于枚举类

参考反编译那些事儿(二)—枚举的反编译
Java枚举类,你真的了解吗?

定义枚举类
public enum ResultCode {

    /** 有没有发现写枚举类的这一部分就像是在调用构造方法 */
    SUCCESS(1, "成功"),
    PARAM_IS_INVALID(10001, "参数无效"),
    PARAM_IS_BLANK(10002, "参数为空"),
    PARAM_TYPE_BIND_ERROR(10003, "参数类型错误"),
    PARAM_NOT_COMPLETE(10004, "参数缺失"),
    //上面的逗号可去可不去, 并不会导致编译错误
    ;

    private Integer code;

    private String message;

    //构造函数默认并且必须是private
    ResultCode(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public Integer code() {
        return this.code;
    }

    public String message() {
        return this.message;
    }
}
枚举类的使用

所有的枚举类在编译之后会自动继承enum类, 并且会自动生成一个values()方法

//只放出部分常见代码
public abstract class Enum<E extends Enum<E>>
        implements Comparable<E>, Serializable {

	/**
	实例的名字, 类型为字符串
	即ResultCode.SUCCESS为SUCCESS, ResultCode.PARAM_IS_INVALID为PARAM_IS_INVALID
	*/
    private final String name;

    public final String name() {
        return name;
    }

	/**
	实例的索引, 从0开始
	即ResultCode.SUCCESS.ordinal()为0, ResultCode.PARAM_IS_INVALID.ordinal()为1
	*/
    private final int ordinal;

    public final int ordinal() {
        return ordinal;
    }
    //toString方法与name()一样
    public String toString() {
        return name;
    }
	//判断两个枚举实例是否一样, 注意这里使用的是==, 直接比引用, 说明枚举类的实例是单例的
    public final boolean equals(Object other) {
        return this==other;
    }
    /**
    比较两个枚举实例的索引详见, 返回的int
    上面我们知道ResultCode.SUCCESS.ordinal()为0, ResultCode.PARAM_IS_INVALID.ordinal()为1
    所以ResultCode.SUCCESS.compareTo(ResultCode.PARAM_IS_INVALID)为0-1=-1
    */
    public final int compareTo(E o) {
		//略去实现代码
    }
}

验证:

//ResultCode.values()会返回ResultCode这个枚举类的所有实例, 类型为ResultCode[]
for (ResultCode resultCode : ResultCode.values()) {
            System.out.println(resultCode.name());
            System.out.println(resultCode.ordinal());
            System.out.println(resultCode.compareTo(ResultCode.SUCCESS));
}
//ResultCode.valueOf()会返回name与参数相等的枚举实例
ResultCode SUCCESS = ResultCode.valueOf("SUCCESS");
System.out.println(SUCCESS.equals(ResultCode.SUCCESS));   //输出为true
枚举类中定义抽象方法
/**
 * 枚举类可以有抽象方法,但是必须在它的实例中实现
 */
public enum AbstractWeek {

    MONDAY(0,"星期一") {
        @Override
        public AbstractWeek getNextDay() {
            return TUESDAY;
        }
    }, TUESDAY(1,"星期二") {
        @Override
        public AbstractWeek getNextDay() {
            return WEDNESDAY;
        }
    }, WEDNESDAY(2,"星期三") {
        @Override
        public AbstractWeek getNextDay() {
            return THURSDAY;
        }
    }, THURSDAY(3,"星期四") {
        @Override
        public AbstractWeek getNextDay() {
            return FRIDAY;
        }
    }, FRIDAY(4,"星期五") {
        @Override
        public AbstractWeek getNextDay() {
            return SATURDAY;
        }
    }, SATURDAY(5,"星期六") {
        @Override
        public AbstractWeek getNextDay() {
            return SUNDAY;
        }
    }, SUNDAY(6,"星期日") {
        @Override
        public AbstractWeek getNextDay() {
            return MONDAY;
        }
    };

    private int num;
    private String desc;

    AbstractWeek(int num,String desc) {
        this.num = num;
        this.desc=desc;
    }

    //一个抽象方法
    public abstract AbstractWeek getNextDay();
}
反编译与语法糖
public enum Weather {
	
	Sunny(1, "晴天") {
		@Override
		public String test() {
			return "今天阳光明媚!!!\n";
		}
	},
	Rainy(2, "雨天") {
		@Override
		public String test() {
			return "出门别忘带把雨伞哦!!!\n";
		}
	},
	Cloudy(3, "多云") {
		@Override
		public String test() {
			return "别出去登高望远了,你看不远的,呵呵呵!!!\n";
		}
	};
 
	private int value;
	private String label;
 
	private Weather(int value, String label) {
		this.value = value;
		this.label = label;
	}
 
	public int getValue() {
		return value;
	}
 
	public String getLabel() {
		return label;
	}
 
	public abstract String test();

}

我们将上述代码进行反编译:

import java.io.PrintStream;
import java.util.*;
 
//枚举类继承了Enum, 所以我们在定义的时候不能再继承其他的类了
//非抽象枚举类默认是final的, 所以不要去继承非抽象的枚举类
public abstract class Weather extends Enum {
 
    //这里s表示name, i表示ordinal
    //构造函数为私有的
	private Weather(String s, int i, int value, String label) {
		super(s, i);
		this.value = value;
		this.label = label;
	}
 
	public int getValue() {
		return value;
	}
 
	public String getLabel() {
		return label;
	}
 
    //我们自己定义的抽象方法
	public abstract String test();

 	//values()返回所有枚举类的实例
	public static Weather[] values() {
		Weather aweather[];
		int i;
		Weather aweather1[];
		System.arraycopy(aweather = ENUM$VALUES, 0, aweather1 = new Weather[i = aweather.length], 0, i);
		return aweather1;
	}
 
	public static Weather valueOf(String s) {
		return (Weather) Enum.valueOf(Weather, s);
	}
 
	Weather(String s, int i, int j, String s1, Weather weather) {
		this(s, i, j, s1);
	}
 
    //这是我们所定义的枚举类实例, 这也是为什么我们在定义枚举类的时候就像是在调用构造函数
    //每一个变量都是public static final
	public static final Weather Sunny;
	public static final Weather Rainy;
	public static final Weather Cloudy;
    
	private int value;
	private String label;
    
	private static final Weather ENUM$VALUES[];
 
	static {
		Sunny = new Weather("Sunny", 0, 1, "\u6674\u5929") {
			public String test() {
				return "\u4ECA\u5929\u9633\u5149\u660E\u5A9A\uFF01\uFF01\uFF01\n";
			}
		};
		Rainy = new Weather("Rainy", 1, 2, "\u96E8\u5929") {
			public String test() {
				return "\u51FA\u95E8\u522B\u5FD8\u5E26\u628A\u96E8\u4F1E\u54E6\uFF01\uFF01\uFF01\n";
			}
		};
		Cloudy = new Weather("Cloudy", 2, 3, "\u591A\u4E91") {
			public String test() {
				return "\u522B\u51FA\u53BB\u767B\u9AD8\u671B\u8FDC\u4E86\uFF0C\u4F60\u770B\u4E0D\u8FDC\u7684\uFF0C\u5475\u5475\u5475\uFF01\uFF01\uFF01\n";
			}
		};
		ENUM$VALUES = (new Weather[] { Sunny, Rainy, Cloudy });
	}
}

从上述我们可以看出, 枚举类的实现还是普通的java类, 只不过这个java类的构造函数是私有的, 而且实例的个数是有限个的, 当这个枚举类的实例个数只有一个的时候, 这个类就变成了单例模式了.

[ensp报错:USG6000V错误代码45解决方案] [ensp报错:USG6000V:错误代码45解决] [ensp报错:USG6000V:错误代码45解决] 第一种处理方式: ensp的45错误帮助文档里的解决方法:(这里就不说了,上华为爸爸的图) ensp的45错误:如果你的45错误不是描述的那个,可能是ensp与virtualbox不兼容了。 错误描述:具体表现为在virtualbox里没有vfw_usg的条目,虚拟介质管理器里也没有相应的条目: 就是vfw_usg_vdi这个 这种情况下你把ensp卸载重装多少次都没用,原因在两个软件的兼容 阅读详情

相关推荐

RT-Thread学习笔记(5):SPI驱动框架分析

1、两个设备模型 在spi驱框架中,一般会自己初始化一个总线设备(rt_spi_bus),当我们通过挂载后,会相应注册一个从设备(rt_spi_device)。 1、总线设备模型 struct rt_spi_bus { struct rt_device parent; rt_uint8_t mode; const struct rt_spi_ops *ops; struct rt_mutex lock; struct rt_spi_device *owner; };

BLBQ962464的博客 1万+

java枚举invalid,为枚举参数生成的API无效

swagger: "2.0"...- in: "body"name: "sortName"required: falseschema:type: "string"...基于以下Java代码:@ApiOperation(httpMethod = "GET",value = "Selecting a set of default templates",response = GalleryTemplat...

weixin_33394460的博客 425

用 ABAP OAuth 2.0 Client 直连 SAP SuccessFactors:从体系到落地的一条龙实践指南

ABAP SMI允许在后端对外部服务的OData端点进行定义与自定义化配置,并以受信连接的方式暴露给ABAP应用调用。它并不替代OAuth,而是扮演端点与自定义参数的集中化定义者,最终认证依旧由完成。对于需要在ABAP后端发起临时或补充型OData调用的场景,SMI是一个轻量而清晰的集成入口。scope的客户端应用已经完成注册,API DomainCompany ID、证书或密钥都已归档。ABAP的Profile与Client已建立并绑定,OA2C_GRANT可见绿色访问状态。SMI。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 286

html自定义状态码,ResultCode 自定义错误状态码

public class ResultCode {// 成功状态码public static final int SUCCESS = 1;// -------------------失败状态码----------------------// 参数错误public static final int PARAMS_IS_NULL = 10001;// 参数为空public static final i...

weixin_29479879的博客 812

【图像去噪】论文精读:FM2S: Self-Supervised Fluorescence Microscopy Denoising With Single Noisy Image

论文题目:FM2S: Self-Supervised Fluorescence Microscopy Denoising With Single Noisy Image —— FM2S:单噪声图像自监督荧光显微镜去噪arXiv 2024!显微图像去噪!通过可视化详细的细胞结构和生物过程,荧光显微镜具有显着先进的生物学研究。然而,由于难以精确建模固有噪声和获取干净图像进行训练,这种图像去噪任务往往面临挑战,这限制了大多数现有方法。在本文中,我们提出了一种有效的。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 408

冠层分析法提取叶面积指数及其应用

冠层分析法是利用植物冠层空间结构分析LAI的方法。其基本原理是通过相机或扫描仪对植物冠层垂直方向的照片或图像进行获取,再运用图像处理方法实现植被的自动识别和覆盖度计算,以此推算LAI。假设有一块田地,需测量其LAI,首先在田地中央设置一杆高度为3米、朝向田地中心、覆盖角度为50度的相机。利用上述函数,对相机采集到的图像进行处理,即可得到田地的LAI。在Matlab中,读取图片可以使用imread函数,对图片进行预处理可以使用imadjust函数调整灰度,使用imbinarize函数进行二值化处理。

m0_47037246的博客 739

Java中枚举的定义

java中关于枚举的定义: 枚举是一种引用数据类型 枚举类型怎么定义: enum 枚举名 { } 结果只有两种情况的,建议使用boolean类型。 结果超过两种,并且还是可以一枚一枚列举出来的,建议使用枚举。 枚举里面的值可以看成常量,值是枚举类型。 名称全部大写,单词以“_”隔开。 各个枚举值之间用“,”隔开,最后一个枚举值后面逗号可有可无。 测试代码: public class Test01 { public static void main(String[] args) { i

pipizhen_的博客 1万+

28.Anaconda安装jupyter notebook、jupyterlab及体验

手贱,不小心将Anaconda自带得jupyter给卸载了,没法子了查了好多资料都比较麻烦,所以自己摸索着重新安装,记录一下心得。说明:Anaconda没有加入环境变量,Anaconda官方建议不要将Anaconda加入环境变量,这就意味着他和python是可以共存的。

迷逝 5028

Java项目中枚举定义以及使用

最近写新项目!有很多数据字典常量需要定义和使用、就顺便记录一下、什么是枚举类呢?就是用enum修饰是一种Java特殊的类,枚举是class、底层是继承了java.lang.Enum类的实体类、使用枚举可以很方便的定义数据常量、方便清晰我们使用下面就举例说明一下吧1)出于类型安全考虑,没用枚举类之前,常用静态常量来表示。 比如对于性别的表示: 这种性别定义实际上是一个整数数据类型。首先,这些变量可用于加减运算。当然我们很少这样干 第二,含义不明确。我们调试的时候,最初将“男”输出到,结果为1。因此,我们必

Moonxiyue的博客 2195

YOLOv8 改进涨点 | 模块即插即用 直接可用

在目标检测任务中,注意力机制能够帮助模型聚焦于图像中的关键区域,显著提升检测精度。。创建模块代码注册模块修改任务解析tasks.py创建YAML配置文件模块核心优势适用场景计算开销SOCA捕获二阶统计信息,增强通道间相关性需要精细特征区分的场景中等SK自适应多尺度核选择多尺度目标检测中等偏高显式特征聚集-分配机制全局上下文建模中等A2-Net双线性注意力,高效全局交互复杂场景理解中等偏高CrissCross线性复杂度全局上下文高分辨率输入,长距离依赖较低。

u012133341的博客 2257

GStreamer —— 2.1、Windows搭建GStreamer环境,Qt加载GStreamer库后运行 - “教程1:Hello world!“(附:完整源码)

GStreamer —— 2、Windows搭建GStreamer环境,Qt加载GStreamer库后运行"教程1:Hello world!"

796

Java实现枚举通过Code获取相应的Value值

Java实现枚举通过Code获取相应的Value值

一恍过去 3万+

【Conda虚拟环境】新建 + 激活 + 安装 + 查看 + 退出 + 删除 + 复制 + 导出 + 导入 + 更改

(1)创建虚拟环境(2)激活虚拟环境(4)查看虚拟环境(3)退出虚拟环境(5)删除虚拟环境(6)复制虚拟环境(7)导出虚拟环境(8)导入虚拟环境(9)更改虚拟环境的安装路径(10)在指定路径下,配置虚拟环境

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 4万+

Java中的枚举类(Enumeration)是什么(定义、实例)?为什么要用?深度剖析一下枚举类本质

枚举类从初始到深剖

m0_63553261的博客 1188

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java的枚举类

私有化类的构造器,保证不能在类的外部创建其对象在类的内部创建枚举类的实例。,对外暴露这些常量对象// 声明当前类的对象的实例变量// 私有化类的构造器// 提供实例变量的get方法// 创建当前类的实例public static final Season spring = new Season("春天", "春暖花开");public static final Season summer = new Season("夏天", "夏日炎炎");

2302_81034736的博客 1430

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

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

enum枚举类,java中枚举类的概念,什么是枚举类enum,结合实战案例理解

enum、java

zhangfuping123456789的博客 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java enum 枚举类

如果针对于某个类,其实例是确定个数,则推荐将此类声明为枚举类。如果枚举类的实例只有一个,则可以看作时单例的实现方式。

qq_35899077的博客 1415

Java中的枚举类

一.枚举类型相当于特殊的类,经过编译之后同样产生一个class文件。枚举类型中可以定义方法(包括构造 方法)、属性、静态的方法和属性、继承接口、重载覆盖等,类似于class。 Java枚举类型本质上 是一种继承java.lang.Enum类,是引用数据类型,因此也称为“枚举类”。 (1)Java中是使用enum关键词声明枚举类,具体定义放在一对大括号内,枚举的语法格式如下: (2)“枚举类”是该枚举类的名称,它首先应该是有效的标识符,其次应该遵守Java命名规范,它应该是一个名称,如果采用英文单词命名,首

weixin_44589643的博客 2681

枚举类总结

`订单状态`:Nonpayment(未付款)、Paid(已付款)、Fulfilled(已配货)、Delivered(已发货)、Checked(已确认收货)、Return(退货)、Exchange(换货)、Cancel(取消)- `支付方式`:Cash(现金)、WeChatPay(微信)、Alipay(支付宝)、BankCard(银行卡)、CreditCard(信用卡)- `就职状态`:Busy(忙碌)、Free(空闲)、Vocation(休假)、Dimission(离职)则推荐将此类声明为枚举类。

m0_59281987的博客 469

java中的枚举类_java中的枚举类

初识枚举类,我们也许会提出疑问,枚举它是一种新的类型吗?不同于基本数据类型,引用类型??为了更好地理解,我们从反编译一个enum类开始:原java代码importjava.util.Arrays;importjava.util.List;publicenumWeather{Sunny(1,"晴天"),Rainy(2,"雨天"),Cloudy(3,"多云");privatein...

weixin_42395171的博客 163

Java中Enum枚举类型在项目中应用

Java中枚举类型的使用方式及通过枚举优化if-else判断

雾林小妖的博客 509

【Java】枚举类

Java 枚举 知识点 概念 enum的全称为 enumeration, 是 JDK 1.5 中引入的新特性。 在Java中,被enum关键字修饰的类型就是枚举类型。形式如下: enum Color { RED, GREEN, BLUE } 如果枚举不添加任何方法,枚举值默认为从0开始的有序数值。以 Color 枚举类型举例,它的枚举常量依次为RED:0,GREEN:1,...

Mr_EvanChen的Blog 563

java-枚举类的定义及使用

文章目录枚举类的定义jdk5.0之前定义枚举类jdk5.0之后定义枚举类使用enum关键字定义枚举类使用enum关键字定义的枚举类实现接口 枚举类的定义 关于枚举类 1 枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类 2 当需要定义一组常量时,强烈建议使用枚类类 3 如果枚举类中只有一个对象,则可以作为单例模式的实现方式。 如何定义枚举类 方式一:jdk5.0之前,自定义枚举类 方式二:jdk5.0之后,可以使用enum关键字定义枚举类 jdk5.0之前定义枚举类 /** * jdk5.0之

记录学习点滴 8932

JAVA中的枚举类:如何定义枚举类+枚举类的使用+枚举类中常用方法的介绍+一个枚举类的示例

Java中的枚举类,什么是枚举类、如何定义枚举类、枚举类型在switch中的作用、枚举类中的方法、枚举类的构造器、枚举类可以有哪些成员、如何在枚举类中定义抽象方法、枚举类中的两个特殊的方法:values()和valueOf(),最后写了一个枚举类的小例子,进一步理解枚举类

a289246的博客 7447

枚举类定义与使用

枚举类定义与使用 一、概述 什么是枚举? 其实枚举就是在一个类里定义几个静态变量,每个变量都是这个类的实例。 比如说,类Human有两个静态变量:Man,Woman,每一个变量都是Human类的实例。用的时候就直接写Human.Man,Human.Woman,用的时候就直接用Human.Man.hasXJJ()或者Human.Woman.hasXJJ()方法,这不就是枚举么。 枚举类...

Bruce小鬼 7636

[Java] enum枚举类的定义与使用

简要介绍下enum和枚举类的定义和使用

Pilipilip233的博客 2847
上一篇: Maven内置隐含变量
下一篇: tk mybatis通用mapper
AngerWind
博客等级 码龄10年 7粉丝 12原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值