(JAVA): 自定义枚举和enum枚举类型------详解。

article/2025/4/4 15:05:24

目录

 言图:

☣☣一、基本介绍 

☣1、什么是枚举

☣2、枚举的特点

☣3、枚举的实现方式

☣☣二、自定义类实现枚举

☣1、自定义枚举的特点

☣2、代码示例

☣3、代码分析

☣☣三、enum关键字实现枚举

☣1、enum使用细节

☣2、enum实现接口

☣3、代码示例     

 四、enum常用方法

1、常用方法表

2、常见方法演示:代码示例

五、在switch中使用枚举 :代码示例


 言图:

☣☣一、基本介绍 

☣1、什么是枚举

        枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。本质就是一个类里定义几个静态变量,每个变量都是这个类的实例。
 

☣2、枚举的特点

        ❶ 枚举是一组常量的集合

        ❷ 枚举属于一种特殊的类,里面只包含一组有限的特定的对象

☣3、枚举的实现方式

        ❶ 自定义类实现枚举

        ❷ 使用 enum 关键字实现枚举


☣☣二、自定义类实现枚举

☣1、自定义枚举的特点

       ▷ 不需要提供setXxx方法,因为枚举对象值通常为只读

       ▷ 对枚举对象、属性使用 final + static 共同修饰,实现底层优化

       ▷ 枚举对象名通常全部大写,遵循常量命名的规范

       ▷ 枚举对象根据需要,可以有多个属性

☣2、代码示例

package advanced.little_project.project02;public class case223 {public static void main(String[] args) {//因为是静态方法所以直接调用System.out.println(Season.AUTUMN);System.out.println(Season.SPRING);}
}//class类
class Season {private String name;//在 Season 内部,直接创建固定的对象 ,//优化,可以加入 final 修饰符public static final Season SPRING = new Season("春天");public static final Season WINTER = new Season("冬天");public static final Season AUTUMN = new Season("秋天");public static final Season SUMMER = new Season("夏天");//将构造器私有化,为了防止直接 newprivate Season(String name) {this.name = name;}//去掉 setXxx 方法, 防止属性被修改,只保留getXxx方法,用于读取public String getName() {return name;}//重写toString()方法,用于输出@Overridepublic String toString() {return "Season{" + "name='" + name + '}';}
}

☣3、代码分析

        ▶ 注意:自定义类枚举,创建的类是class 类,比如代码中的:class Season { }

        ▶ 自定义枚举的一般思路:

              ▷ 写属性:私有化

              ▷ 写构造器:将构造器私有化,为了防止直接 new

              ▷ 写getXxx方法:去掉 setXxx 方法, 防止属性被修改,只保留getXxx方法,用于读取

              ▷ 重写toString()方法,用于输出

              ▷ 在自定义枚举的内部,直接创建固定的对象 ,

              ▷ 可以加入 final 修饰符进行优化


☣☣三、enum关键字实现枚举

☣1、enum使用细节

        ① 我们使用 enum 关键字定义一个枚举类时,默认会继承 java.lang.Enum 类, 而且是一个 final 类,如图:

        ② 自定义枚举类的写法:  public static final Season2 SPRING = new Season2("春天")
        ③ enum关键字实现枚举的写法:  SPRING("春天")
        
        ④ 如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略
        ⑤ 当有多个枚举对象时,使用 “,” 间隔,最后有一个分号结尾
         枚举对象必须放在枚举类的行首

☣2、enum实现接口

       ▷ 使用enum关键字后,就不能再继承其他类了,因为enum会隐式继承Enum,而Java是单继承机制
       ▷ 枚举类和普通类一样,可以实现接口,形式:enum 类名 implements 接口1,接口2{}

3、代码示例     

package advanced.little_project.project02;public class case223 {public static void main(String[] args) {//因为是静态方法所以直接调用System.out.println(Season.AUTUMN);System.out.println(Season.SPRING);}
}//定义enum关键字实现枚举
enum Season {//枚举对象必须放在枚举类的行首SPRING("春天"),WINTER("冬天"),AUTUMN("秋天"),SUMMER("夏天");private String name;//将构造器私有化,为了防止直接 newprivate Season(String name) {this.name = name;}//去掉 setXxx 方法, 防止属性被修改,只保留getXxx方法,用于读取public String getName() {return name;}//重写toString()方法,用于输出@Overridepublic String toString() {return "Season{" + "name='" + name + '}';}
}


 四、enum常用方法

1、常用方法表

方法名详细描述
valueOf传递枚举类型的Class对象和枚举常量名称給静态方法valueOf,会得到与参数匹配的枚举常量。
toString得到当前枚举常量的名称。你可以通过重写这个方法来使得到的结果更易读。
equals在枚举类型中可以直接使用“=="来比较两个枚举常量是否相等。Enum提供的这个equals0方法,也是直接使用“==”实现的。它的存在是为了在Set、List 和Map中使用。注意,equals()是不可变的。 
hashCode实现了hashCode0来和equals0保持- - 致。它也是不可变的。
getDeclaringClass得到枚举常量所属枚举类型的Class对象。可以用它来判断两个枚举常量是否属于同一一个枚举类型。
name得到当前枚举常量的名称。建议优先使用toString0
ordinal得到当前枚举常量的次序。
compareTo枚举类型实现了Comparable接口,这样可以比较两个枚举常堂的大小(按照声明的顺序排列)。
clone枚举类型不能被Cloneo为了防止子类实现克隆方法,Enum 实现了一个仅抛出CloneNotSupportedException异常的不变Clone0。
values返回枚举类中所有的值。

2、常见方法演示:代码示例

首先定义一个enum Weekday 类:

enum Weekday {MONDAY("星期一"),TUESDAY("星期二"),Week("星期三"),THURSDAY("星期四"),FIRDAY("星期五"),STAURDAY("星期六"),SUNDAY("星期日");private String name;private Weekday(String name) {this.name = name;}@Overridepublic String toString() {return  name;}
}

1、name 方法:

        //name 得到当前枚举常量的名称,建议优先使用toString()System.out.println(Weekday.MONDAY.name());System.out.println(Weekday.STAURDAY.name());

2、toString 方法:

        //toString 得到当前枚举常量的名称System.out.println(Weekday.MONDAY.toString());System.out.println(Weekday.STAURDAY.toString());

3、ordinal 方法:

        //ordinal()输出的是该枚举对象的次序/编号,从0开始编号Weekday monday = Weekday.MONDAY;System.out.println(monday.ordinal());//MONDAY枚举对象是第一个,因此输出0

4、values 方法:

        //values 方法Weekday[] all = Weekday.values();for(Weekday c : all){System.out.println(c);}

5、valueOf 方法:

        //valueOf:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常Weekday staurday = Weekday.valueOf("THURSDAY");System.out.println(staurday.getDeclaringClass());

6、compareTo 方法:

        //compareTo 方法:输出结果为两个枚举对象编号的差值System.out.println(Weekday.STAURDAY.compareTo(Weekday.MONDAY));

五、在switch中使用枚举 :代码示例

package aom.enumeration;public class Enumeration {public static void main(String[] args) {Week monday = Week.MONDAY;//使用Switch进行匹配相应的日期switch (monday){case MONDAY:System.out.println("星期一");break;case TUESDAY:System.out.println("星期二");break;case Weeks:System.out.println("星期三");break;case THURSDAY:System.out.println("星期四");break;case FIRDAY:System.out.println("星期五");break;case STAURDAY:System.out.println("星期六");break;case SUNDAY:System.out.println("星期日");break;default:System.out.println("匹配失败!");break;}}
}
//定义枚举
enum Week {MONDAY,TUESDAY,Weeks,THURSDAY,FIRDAY,STAURDAY,SUNDAY;
}

http://chatgpt.dhexx.cn/article/O1Tk8xxd.shtml

相关文章

色彩-基础理论

颜色三大指标 色相 色相是颜色的一个属性,只有黑白灰没有色相这个属性(那银灰色是什么?) 颜色的相貌,指的也是给颜色一个名字 例如:暗红、酒红、土黄、墨绿 饱和度 颜色的鲜艳程度 纯度 饱和度主要取决于含色成分和消色成分&a…

10bit、8bit色彩深度的区别

下面 一张图能说明区别,10bit能表现的颜色值范围更多

OpenCV色彩空间与通道

色彩空间与通道 色彩空间(Color Space)是指用来描述和表示图像颜色的一种方式。不同的色彩空间具有不同的颜色模型和表示方式,常见的色彩空间包括 RGB、CMYK、HSV、Lab 等。 通道(Channel)是指在某种色彩空间中独立表…

色彩空间(一):色彩空间基础

转载自:https://www.zhangxiaochun.com/color-space-1/ 序言 相信很多做设计的小伙伴都听说过 RGB 或者 CMYK 这样的概念,RGB 和 CMYK 就是两个典型的色彩空间模式,前者主要用于光学色彩展示(比如我们的电脑显示屏)&am…

【数字图像处理】色彩模型

作者介绍:小星的学习笔记,一名努力成为合格程序员的本科在读生 提示:本文仅为学习复习笔记,如有不对欢迎指正🎉🎉🎉 文章目录 前言 一、什么是色彩模型? 二、面向设备的色彩模型 …

色阶

Ps菜单:图层/新建调整图层/色阶 Layer/New Adjustment Layer/Levels Ps菜单:图像/调整/色阶 Image/Adjustments/Levels 快捷键:Ctrl/Cmd L 色阶 Levels命令可以调整图像的阴影、中间调和高光的强度级别,校正色调范围和色彩平衡。…

调色进阶工具的一些认识——色彩平衡

打开色彩平衡里面的内容,以及有哪些功能 我们打开CR里面也有阴影高光 阴影 高光 中间调什么概念呢,等于我们打开一张图片把这张图片分成了这三个部分。 阴影:在图指的是颜色偏暗的,那么根据这个颜色条红色部分同理可选颜色&a…

PS 色阶调整之算法公式原理详解及 Python 实现(色阶原理)

本文介绍了 PS 中色阶的实现原理及公式,并用 Python 实现,自测与 PS 的色阶调整效果基本完全一样(使用和 PS 中色阶相同的参数对比效果,包括各极限值,本文只实现了 RGB 整体色阶的处理,对各个通道的处理逻辑…

第四章 Opencv图像色彩空间与通道

文章目录 1.色彩空间1-1.RGB/BGR色彩空间1-2.GRAY色彩空间1-3.HSV色彩空间 2.通道2-1.拆分通道:split()方法1.拆BGR色彩空间图像的通道2.拆HSV色彩空间图像的通道 2-2.合并通道:merge()方法1.B、G、R 通道的合并2.H、S、V 通道的合并3.B、G、R、A 通道的…

halcon画出灰度直方图_Halcon绘制彩色深度图

此小文主要介绍颜色空间的转换,将深度图转为彩色,借以说明颜色转换与图像通道,下面是效果: 彩色深度图.jpg 深度图的生成 深度图的生成有便捷的算子可用,主要使用了binocular_disparity算子,输入左右两幅图…

【色度学】颜色的显色系统

我的理解: 色相:绝对量,表示颜色。 视明度:人眼视觉对某一刺激量知觉光的数量的多少,是知觉的绝对量。 明度:人眼视觉对某一刺激量直觉出其与周围白点或者最亮区域的相对亮度。 明度 视明度/白场视明度 视彩…

四、色彩空间

一、色彩空间 1、什么是色彩空间? 色彩空间是定义的颜色范围。 2、常见的色彩空间有哪些? ①RGB ②HSV 在OpenCV中,Hue的值为0~180,之所以不是360是因为,8位存不下,故进行归一化操作,使得H…

色彩系统总结

一、基本概念 1、几种色彩模式:RGB、HSB(HSV)、HSL RGB(Red 红色、Green 绿色、Blue 蓝色) HSB(Hue 色相、Saturation 饱和度、Brightness 明度) HSB 也称 HSV(Hue 色相、Saturation 饱和度、Value 值&…

色阶、灰度色彩模式、灰度等级

色彩三属性图解 色彩的客观三属性与主观三属性 在经典艺用色彩学中,我们只知道一种“色彩三属性”,实际上它只是对人们主观感受色彩的心理描述,建立在人的主观基础之上的对色彩属性的描述,色度学称之为“色彩的主观三属性”。 色彩…

图像的大小计算 位深和色深

图像的大小计算 1、位深和色深 位深:即在某一分辨率下,每一个像素点可以有多少种色彩来描述,单位为“bit”(位)。典型的色深是8-bit、16-bit、24-bit和32-bit。深度数值越高,可以获得更多的色彩。 图像深度是指存储每个像素所用的…

15.色彩空间

目录 一 色彩空间的粗略定义 二 色彩空间的分类 1.利用原色相混的比例表示的色彩空间 2.利用不同的概念表示的色彩空间 (1).色相 (2)饱和度 (3)明度 (4)亮度 三 HSV和HSL色…

2.1 色彩空间

色彩发送器 色彩认知:光源是出生点,光源发射出光线,光线通过直射反射折射等路径最终进入人眼。但是人眼接收到光线后,人眼的细胞产生了一系列化学反应。由此把产生的新号传入大脑,最终大脑对颜色产生了认知感知。 光的…

色数(色深”、“灰阶”、“色数”三者的关系)

色数,就是显示器能够显示最大色彩数量。我们在选购显示器时,常常会发现产品资料并未提及色深相关信息,却能看到“1670万色”、“10亿色”之类关于色数的描述,而“10亿色彩”表示该显示器能显示约10亿种不同的颜色。 比如&#xf…

彩色图像色彩空间原理(理论篇—6)

自然界的各种色彩、人类所感知的色彩以及各种图像设备和计算机软件所使用的颜色可通过色彩空间(Color Space)来描述。 色彩是人脑对不同视觉刺激的反应。人眼视网膜上的色敏细胞会分别对红、绿、蓝3个波段的色彩进行采样。采样后的信号传送至大脑后组合…

色彩深度、位深度、8位图像、16位图像、24位图像

在数字图像处理中,平时所说的1位图像、8位图像、16位图像、24位图像、32位图像等,其中的“位”是指图像中每一个像素点的色彩深度,或位深度。 在处理数字图像中的颜色时,计算机实际上是用每个像素点需要的**色彩深度(位…