[Java]枚举类

news2025/1/16 15:05:38

文章目录

  • 🍊 枚举类理解
  • 🍊 自定义枚举类
  • 🍊 使用 enum 关键字定义枚举类
  • 🍊 Enum类的常用方法
    • 🥭 toString()
    • 🥭 Enum.valueOf(Class enumClass, String name)
    • 🥭 valueOf(String name)
    • 🥭 values()
    • 🥭 name()
    • 🥭 ordinal()
    • 🥭 compareTo()
    • 🥭 equals()
    • 🥭 getDeclaringClass()
    • 🥭 hashCode()
    • 🥭 clone()
  • 🍊 使用enum关键字定义的枚举类实现接口
    • 🥭 实现接口,在enum类中实现抽象方法
    • 🥭 枚举类的对象分别实现接口的抽象方法


🍊 枚举类理解

当我们需要的对象的个数只有有限个时,即对象的取值只在一个有限的集合内,且这些有限个对象都是确定的,针对于这种情况,我们可以自定义枚举类。

例如🌰,我们购买衣服时,对于衣服的尺码,有S、M、L、XL、XXL、XXXL,此时衣服的尺码的取值在一个有限的集合内,对于衣服的尺码,我们可以自定义一个枚举类,该枚举类的对象的值只有S、M、L、XL、XXL、XXXL有限个。

对于类的对象只有有限个,且该类的每个对象都是确定的,称这个类为枚举类

例如🌰,季节这个枚举类,季节类的对象只有春季、夏季、秋季、冬季四个,季节类的对象为有限个且每个对象都是确定的。

当我们需要定义一组常量时,强烈建议使用枚举类。

若枚举只有一个对象, 则可以作为一种单例模式的实现方式。

注意,对于枚举类型的变量的取值,只能是枚举类中提供有限个对象或者是null。

🍊 自定义枚举类

自定义枚举类:

// 自定义枚举类 (季节类)
class Season {
	// 1. 声明属性,使用 private final 修饰
	// 由于枚举类的对象都是确定的,其属性值在对象创建之后也是确定的,
	// 一般枚举类的属性为常量,对象创建之后其属性值一般不会进行修改,也不允许修改。
    private final String seasonName;
    private final String seasonDesc;

	// 2. 私有化构造器,并为对象属性赋值
	// 由于枚举类的对象是确定的,所以不对外通过构造器
    private Season(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

	// 3. 提供当前枚举类的多个对象
	// 由于枚举类只向外提供有限个的对象,不进行实例化,
	// 所以将有限个对象作为类属性向外暴露
	// 使用 public static final 修饰
    public static final Season SPRING = new Season("春天", "春暖花开");
    public static final Season SUMMER = new Season("夏天", "夏日炎炎");
    public static final Season AUTUMN = new Season("秋天", "秋高气爽");
    public static final Season WINTER = new Season("冬天", "冰天雪地");

	// 4. 提供获取枚举类对象属性的方法
    public String getSeasonName() {
        return seasonName;
    }
    public String getSeasonDesc() {
        return seasonDesc;
    }

	// 5. 提供重写的toString方法
    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
}

测试自定义枚举类:

public class DefineEnum {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        System.out.println(spring);
    }
}

在这里插入图片描述

🍊 使用 enum 关键字定义枚举类

enum Season{
    // 1. 提供当前枚举类的对象
    // 使用enum关键字定义枚举类,枚举类向外提供的对象必须定义在类的开始位置
    // 且枚举类向外提供的对象不需要使用 “public static final 类名” 修饰
    // 多个对象之间使用逗号进行分割,最后一个对象以分号结束
    // 定义如下:
    SPRING("春天", "春暖花开"),
    SUMMER("夏天", "夏日炎炎"),
    AUTUMN("秋天", "秋高气爽"),
    WINTER("冬天", "冰天雪地");

    // 2. 声明枚举类的属性 private final 修饰
    // 由于枚举类的对象都是确定的,其属性值在对象创建之后也是确定的,
	// 一般枚举类的属性为常量,对象创建之后其属性值一般不会进行修改,也不允许修改。
    private final String seasonName;
    private final String seasonDesc;

    // 3. 私有化构造器,并为对象属性赋值
    // 由于枚举类的对象是确定的,所以不对外通过构造器
    private Season(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

    // 4. 提供获取枚举类对象属性的方法
    public String getSeasonName() {
        return seasonName;
    }
    public String getSeasonDesc() {
        return seasonDesc;
    }
}

注意,使用enum关键字定义的枚举类,默认继承于java.lang.Enum,即所有的使用enum关键字声明的枚举类都是Enum的子类,在Enum类中对toString方法进行了重写,Enum类中的toString方法返回的是枚举类对象的对象名。

public class Test {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        // enum定义的枚举类继承Enum,
        // Enum有重写toString方法,打印枚举类中对象的对象名
        System.out.println(spring); 
		// 查看Season类的父类
        System.out.println(Season.class.getSuperclass());
    }
}

在这里插入图片描述

🍊 Enum类的常用方法

🥭 toString()

如果在使用enum关键字自定义的枚举类中没有重写toString()方法,则默认继承自Enum类的toString()方法,会得到当前枚举类常量对象的名称。

public class Test {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        System.out.println(spring);  // 打印对象,默认自动调用toString方法
        System.out.println(spring.toString());
    }
}

在这里插入图片描述

🥭 Enum.valueOf(Class enumClass, String name)

该方法可以根据指定的枚举类enumClass和枚举类常量的名称name获取匹配的枚举常量对象。

public class Test {
    public static void main(String[] args) {
    	// Season.class 获取Season对应的Class类型的对象
        Season spring = Enum.valueOf(Season.class, "SPRING");
        System.out.println(spring);
    }
}

在这里插入图片描述

🥭 valueOf(String name)

该方法可以根据指定的枚举类常量的名称,获取调用该方法的枚举类当中匹配的枚举常量对象。

public class Test {
    public static void main(String[] args) {
        Season spring = Season.valueOf("SPRING");
        System.out.println(spring);
    }
}

在这里插入图片描述

🥭 values()

该方法可以用于获取一个枚举类的全部枚举类常量对象,该方法返回的是该枚举类类型的所有枚举类常量对象组成的数组。

public class Test {
    public static void main(String[] args) {
        Season[] seasons = Season.values();
        for (int i = 0; i < seasons.length; i++) {
            System.out.println(seasons[i]);
        }
    }
}

在这里插入图片描述

🥭 name()

该方法可以用于获取当前枚举类常量对象的名称。

public class Test {
    public static void main(String[] args) {
        Season spring = Season.valueOf("SPRING");
        System.out.println(spring);
        System.out.println(spring.name());
    }
}

在这里插入图片描述

🥭 ordinal()

该方法可以用于获取当前枚举类常量对象的次序。枚举类常量对象的次序是按照枚举类常量对象在枚举类中声明的位置顺序进行编排的,从0开始计数。

枚举类中声明的位置顺序:

SPRING("春天", "春暖花开"),
SUMMER("夏天", "夏日炎炎"),
AUTUMN("秋天", "秋高气爽"),
WINTER("冬天", "冰天雪地");
public class Test {
    public static void main(String[] args) {
        Season spring = Season.valueOf("SPRING");
        System.out.println(spring);
        System.out.println(spring.ordinal());
    }
}

在这里插入图片描述

🥭 compareTo()

该方法可以用于比较一个枚举类中的枚举类常量对象的大小,比较枚举类常量对象的大小是根据枚举类常量对象在枚举类中的声明次序进行比较的,先声明的枚举类常量对象比后声明的小,即次序小的小。

该方法的返回值为进行比较的两个枚举类常量对象的次序的差,用调用该方法的枚举类常量对象的次序减去方法中传入的枚举类常量对象的次序。

public class Test {
    public static void main(String[] args) {
        Season spring1 = Season.SPRING;
        Season spring2 = Season.SPRING;
        Season summer = Season.SUMMER;
        Season autumn = Season.AUTUMN;
        System.out.println(spring1.compareTo(spring2)); // 0-0
        System.out.println(spring1.compareTo(summer)); // 0-1
        System.out.println(spring1.compareTo(autumn)); // 0-2
    }
}

在这里插入图片描述

🥭 equals()

该方法用于比较两个枚举类常量对象是否相等,即判断是否为同一个枚举类常量对象。如果相等则返回true,否则返回false。

public class Test {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        Season summer = Season.SUMMER;
        Season autumn = Season.AUTUMN;
        Size s = Size.S;
        System.out.println(s.equals(s));
        System.out.println(s.equals(spring));
        System.out.println(spring.equals(summer));
    }
}

enum Size {
    S, M, L, XL, XXL, XXXL
}

在这里插入图片描述

比较两个枚举类常量对象是否相等,也可以直接使用==,因为枚举类常量对象只在枚举类被加载时进行了创建。但是使用==比较两个枚举类常量对象只能比较相同类型的枚举类常量对象。

public class Test {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        Season summer = Season.SUMMER;
        Season autumn = Season.AUTUMN;
        Size s = Size.S;
        System.out.println(s == s);
        // System.out.println(s == spring);
        System.out.println(spring == summer);
    }
}

在这里插入图片描述

public class Test {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        Season summer = Season.SUMMER;
        Season autumn = Season.AUTUMN;
        Size s = Size.S;
        System.out.println(s == s);
        System.out.println(s == spring);
        System.out.println(spring == summer);
    }
}

在这里插入图片描述

🥭 getDeclaringClass()

该方法可以用于获取枚举类常量对象的所属枚举类的Class对象。可以用获取的所属枚举类的Class对象判断两个枚举类常量对象是否属于同一个枚举类。

public class Test {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        Season summer = Season.SUMMER;
        Size s = Size.S;
        System.out.println(spring.getDeclaringClass());
        System.out.println(summer.getDeclaringClass());
        System.out.println(s.getDeclaringClass());
        System.out.println(spring.getDeclaringClass().equals(s.getDeclaringClass()));
        System.out.println(spring.getDeclaringClass().equals(summer.getDeclaringClass()));
    }
}

在这里插入图片描述

🥭 hashCode()

该方法可以用于获取枚举类常量对象的hashCode值。由于枚举类常量对象只在枚举类被加载时进行了创建,所以枚举类常量对象的hashCode值在创建之后就是固定不变的。

public class Test {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        Season summer = Season.SUMMER;
        Size s = Size.S;
        System.out.println(spring.hashCode());
        System.out.println(summer.hashCode());
        System.out.println(s.hashCode());
    }
}

在这里插入图片描述

🥭 clone()

枚举类常量对象不能被克隆,为了防止Enum子类实现克隆方法,Enum实现了一个仅抛出CloneNotSupportedException异常的clone()方法。

🍊 使用enum关键字定义的枚举类实现接口

🥭 实现接口,在enum类中实现抽象方法

public class Test {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        spring.show();
    }
}

// 接口
interface Info{
    void show();
}

enum Season implements Info{
    // 1. 提供当前枚举类的对象
    SPRING("春天", "春暖花开"),
    SUMMER("夏天", "夏日炎炎"),
    AUTUMN("秋天", "秋高气爽"),
    WINTER("冬天", "冰天雪地");

    // 2. 声明枚举类的属性, private final 修饰
    private final String seasonName;
    private final String seasonDesc;

    // 3. 私有化构造器,并为对象属性赋值
    private Season(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

    // 4. 提供获取枚举类对象属性的方法
    public String getSeasonName() {
        return seasonName;
    }
    public String getSeasonDesc() {
        return seasonDesc;
    }

    // 5. 接口方法的实现
    @Override
    public void show() {
        System.out.println("现在的季节是:" + this.seasonName);
    }
}

在这里插入图片描述

🥭 枚举类的对象分别实现接口的抽象方法

对于枚举类,可以在每个枚举类常量对象中单独实现接口中的方法,这样每个枚举类常量对象都有属于自己的对于接口方法的实现逻辑,可以实现不同枚举类常量对象相同接口方法有不同的运行逻辑。

public class Test {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        Season[] seasons = Season.values();
        for (int i = 0; i < seasons.length; i++) {
            seasons[i].show();
        }
    }
}

interface Info{
    void show();
}

enum Season implements Info{
    // 1. 提供当前枚举类的对象,每个枚举类常量对象单独实现接口
    SPRING("春天", "春暖花开"){
        @Override
        public void show() {
            System.out.println("春天spring");
        }
    },
    SUMMER("夏天", "夏日炎炎"){
        @Override
        public void show() {
            System.out.println("夏天summer");
        }
    },
    AUTUMN("秋天", "秋高气爽"){
        @Override
        public void show() {
            System.out.println("秋天autumn");
        }
    },
    WINTER("冬天", "冰天雪地"){
        @Override
        public void show() {
            System.out.println("冬天winter");
        }
    };

    // 2. 声明类的属性, private final 修饰
    private final String seasonName;
    private final String seasonDesc;

    // 3. 私有化构造器,并为对象属性赋值
    private Season(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

    // 4. 提供获取枚举类对象属性的方法
    public String getSeasonName() {
        return seasonName;
    }
    public String getSeasonDesc() {
        return seasonDesc;
    }
}

在这里插入图片描述

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

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

相关文章

艾美捷Bio-Helix BluPAD双LED蓝白光照胶台丨舒适、方便

艾美捷Bio-Helix BluPAD双LED蓝白光照胶台&#xff08;切胶仪&#xff0c;透射仪&#xff09;&#xff0c;适用于各种生命科学研究领域&#xff0c;用于观察和分析核酸和蛋白质。鉴于其对凝胶切割、数据成像和归档等观察后应用的最优化和人性化设计&#xff0c;希望为研究人员提…

搭建包含swift组件的openstack云平台详解

由于今天做实验。。。 安装完成虚拟机仅主机模式和nat模式双网卡后&#xff0c;开启网卡进入界面直接ping百度&#xff0c;ping通直接执行下面操作 开启虚拟机&#xff0c;切换到root模式关闭防火墙 查看防火墙是否开启&#xff0c;如果开启请关闭&#xff08;出现Active: ac…

广东的介绍

附录&#xff1a; 1、画图工具&#xff1a;https://www.ldmap.net/map.html?id97f83161-ce02-4e11-989b-fb6645469320 广东之地 因字幅有限&#xff0c;故先列举最端。 巧合点 分隔各地&#xff0c;却有相同的点&#xff0c;是否有相同的影响因素。广东最南&#xff0c;最…

免费搜题接口

免费搜题接口 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳转&a…

[附源码]计算机毕业设计JAVA基于web鲜花销售系统论文2022

[附源码]计算机毕业设计JAVA基于web鲜花销售系统论文2022 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; …

企业数据集成难?Qlik 与微软助你事半功倍

微软年度峰会 Ignite 2022 落下帷幕&#xff0c;正式推出微软智能数据平台&#xff0c;统一微软旗下数据库、数据分析和管理服务&#xff0c;一个基于微软云合规、安全等优势、云端数据平台 开发服务为核心的生态系统初见雏形。 Qlik 作为微软金牌合作伙伴&#xff0c;其数据…

思考思维(2):《极简思考》结构化思维

前言 之前在架构师成长之路(5)--架构师具备的思维_hguisu的博客-CSDN博客_架构思维能力已经总结过了&#xff0c;这里再次全面总结。 有一种人的口头禅是“我只说三点”&#xff0c;这种人通常很厉害。 有人三句话说明白一件事&#xff0c;有人说半天别人也没听懂在说啥。这是…

SpringCloud微服务(五)——Config分布式配置中心

SpringCloud Config分布式配置中心 SpringCloud 微服务意味着要将单体应用中的业务拆分成一个个子服务&#xff0c;每个服务的粒度相对较小&#xff0c;因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行&#xff0c;所以一套集中式的、动态的配置管理设…

继承和多态

文章目录继承为什么要继承继承的概念继承的语法父类成员访问子类中访问父类的成员变量子类中访问父类的成员方法super关键字子类构造方法super和this再谈初始化protected关键字继承方式final关键字继承与组合多态多态的概念多态的实现条件重写向上转型和向下转型向上转型向下转…

GhostNetV2学习笔记

GhostNetV2学习笔记 GhostNetV2: Enhance Cheap Operation with Long-Range Attention Abstract 轻量级卷积神经网络(CNNs)是专为在移动设备上具有较快推理速度的应用而设计的。卷积运算只能捕获窗口区域的局部信息&#xff0c;这阻碍了性能的进一步提高。在卷积中引入自我注…

随时随地创建参数化3D模型—xDesign

在前文3DEXPERIENCE的文章里&#xff0c;我们给各位介绍了3DEXPERIENCE云平台的页面以及怎么点击到对应的平台角色和应用程序。 所以&#xff0c;接下来就给各位介绍云平台当中的应用程序的操作和使用方法。本篇文章主要介绍工程师们在工作中常要用到的3D建模的应用程xDesign&…

间隔一分钟按某个按键一次——VBS脚本

间隔一分钟按某个按键一次-VBS脚本 我们在玩游戏挂机的时候&#xff0c;有的时候长时间鼠标键盘不动一下&#xff0c;游戏就掉线了。或者居家办公出去做核酸检测&#xff0c;时间一长你的钉钉、企业微信等通讯工具就会显示离线状态&#xff0c;这个时候需要有个简易的小脚本帮…

第四章 决策树

4.1 基本流程 决策树是一类常见的机器学习方法。以二分类任务为例&#xff0c;其结构类似于二叉树。以西瓜问题为例&#xff0c;其结构如图所示&#xff1a; 一般的&#xff0c;一颗决策树包含一个根节点、若干个内部结点和若干个叶节点&#xff1b;叶节点对应决策结果&#…

全网最全斗音短视频新老账号起号技巧

大家好&#xff0c;我是我赢助手&#xff0c;专注于自媒体短视频去水印、去重和文案提取运营。 今天给大家分享下全网最全斗音短视频新老账号起号技巧 1、清理手机(手机登录新斗音号才需要清理) 安卓:打开设置-应用管理-斗音短视频-储存占用-清除缓存-卸载 双清方法:先在斗…

同花顺_代码解析_技术指标_Z_1

本文通过对同花顺中现成代码进行解析&#xff0c;用以了解同花顺相关策略设计的思想 目录 ZJ_01 ZJ_02 ZJ_05 ZMMZB ZNZ_ASR ZNZ_BYQD ZNZ_CBAND ZNZ_CBW ZNZ_CBXQD ZNZ_CKD ZNZ_CMACD ZNZ_CMGL ZNZ_CYBB ZJ_01 波段之星 "波段之星"指标为图形化指标。…

C---链表

目录链表的遍历计算链表节点个数查找结点节点后插入新节点节点前插入新节点1.目标节点为头节点 &#xff08;引起链表头变化&#xff09;2.目标节点不是头节点节点前插入新节点&#xff08;两种情况&#xff09;完整版删除节点课外知识&#xff1a;gcc ... -g1.删除头节点2.删的…

CS224W 6 Graph Neural Networks

目录 引入 node embedding Deep Graph Encoders的引入 Basics of Deep Learning Deep Learning for Graphs ​编辑A Naive Approach GCN GCN的基本idea Aggregate Neighbors 训练GCN Unsupervised Training Supervised Training Oview 整体流程 Inductive capabil…

等保三级,多级等保认证的一点了解

2022年11月21日10:28:28 信息安全等级保护管理办法 信息系统的安全保护等级分为以下五级&#xff1a; 第一级&#xff0c;信息系统受到破坏后&#xff0c;会对公民、法人和其他组织的合法权益造成损害&#xff0c;但不损害国家安全、社会秩序和公共利益。 第二级&#xff0c;信…

c++ 之安装opencv显示图片

额,要把yolo+pose+class从python转成c++,一整头大,从头开始试。 win11 + vs2022 c++_v14 + opencv4.6.0 安装opencv 从官网下载OpenCV https://opencv.org/releases/ 我是windows系统,没啥好说的,就是下个exe然后安装。 我是装在 D:\Program Files (x86)\ 目录下,之后…

(一)逻辑回归及其代价函数 --- 吴恩达深度学习笔记

逻辑回归 — 适用于二分类问题 使用逻辑回归算法会得到的输出标签y&#xff0c;y在监督问题中全是0或者1&#xff0c;因此这是一种针对二分类问题的算法。 给定的输入特征向量x和一幅图像对应&#xff0c;我们希望识别这是否是一张猫的图片。因此我们想要一种算法能够输出一个…