Java 枚举(Enum)使用

news2025/7/22 0:13:29

文章目录

        • 枚举引入
        • enum关键字实现枚举
        • enum关键字实现枚举注意事项
        • enum常用方法一览表
        • enum课堂练习
        • enum实现接口

枚举引入

创建Season类, 实例化春夏秋冬四个实例

Season对象有如下特点
1.季节的值是有限的几个值(spring, summer, autumn, winter)
2.只读,不需要修改。

解决方案就是咱们即将提出的枚举

1)枚举对应英文(enumeration, 简写enum)
2)枚举是一组常量的集合。
3)可以这里理解:枚举属于一种特殊的类,里面只包含一组有限的特定的对象。

public class Enumeration {
    public static void main(String[] args) {
        System.out.println(Season.AUTUMN);
    }
}


// 演示定义枚举类
class Season {
    // 1 构造器私有化防止直接new
    // 2 只保留get,去掉set,防止属性被修改
    // 3 在Season内部直接创建固定的对象
    // 4 还可以再优化,使用static对象会使Season类加载,所以再加个final
    private String name;
    private String desc;
    public final static Season SPRING = new Season("春天", "温暖");
    public final static Season WINTER = new Season("冬天", "寒冷");
    public final static Season AUTUMN = new Season("秋天", "凉爽");
    public final static Season SUMMER = new Season("夏天", "炎热");

    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}

1.不需要提供setXxx方法,因为枚举对象值通常为只读.
2.对枚举对象/属性使用final + static共同修饰,实现底层优化.
3.枚举对象名通常使用全部大写,常量的命名规范.
4.枚举对象根据需要,也可以有多个属性

enum关键字实现枚举

使用enum来实现前面的枚举案例,看老师演示,主要体会和自定义类实现枚举不同的地方。

package src.enum_;

public class Enumeration01 {
    public static void main(String[] args) {
        System.out.println(Season.AUTUMN);
    }
}


// 演示定义枚举类
enum Season1 {
    // 如果使用了enum来定义枚举类
    // 1 使用关键字enum来替代class
    // 2 常量名(实参列表)
    // 3 如果有多个常量对象,使用`,`间隔即可
    // 4 如果使用enum,要求常量对象放在类最前面

    SPRING("春天", "温暖"),
    SUMMER("夏天", "炎热"),
    AUTUMN("秋天", "凉爽"),
    WINTER("冬天", "寒冷");
    private String name;
    private String desc;


    private Season1(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}

enum关键字实现枚举注意事项

1.当我们使用enum关键字开发一个枚举类时,默认会继承Enum类[如何证明]

image-20221117161958460

2.传统的public static final Season2 SPRING = new Season2(“春天”, “温暖”); 简化成SPRING(“春天”,“温暖”),这里必须知道,它调用的是哪个构造器.
3.如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略

image-20221117162304457

4.当有多个枚举对象时,使用,间隔,最后有一个分号;结尾
5.枚举对象必须放在枚举类的行首.

image-20221117162800643 image-20221117163000614

enum常用方法一览表

image-20221117170746055

  1. toString:Enum类已经重写过了,返回的是当前对象名子类可以重写该方法,用于返回对象的属性信息

  2. name:返回当前对象名(常量名) ,子类中不能重写

  3. ordinal:返回当前对象的位置号,默认从0开始

  4. values: 返回当前枚举类中所有的常量

  5. valueOf:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常!

  6. compareTo:比较两个枚举常量,比较的就是编号!

enum课堂练习

1)声明Week枚举类,其中包含星期一至星期日的定义; MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
2)使用values返回所有的枚举数组,并遍历,输出下图效果
image-20221117172150056

public class Enumerate02 {
    public static void main(String[] args) {
        Week[] weeks = Week.values();
        for (Week week : weeks
        ) {
            System.out.println(week);
        }
    }
}

enum Week {
    MONDAY("星期一"),
    TUESDAY("星期二"),
    WEDNESDAY("星期三"),
    THURSDAY("星期四"),
    FRIDAY("星期五"),
    SATURDAY("星期六"),
    SUNDAY("星期日");
    private String name;

    private Week(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }
}

enum实现接口

1)使用enum关键字后,就不能再继承其它类了,因为enum会隐式继承Enum, 而Java是单继承机制。
2)枚举类和普通类一样,可以实现接口,如下形式。

enum 类名 implements 接口1,接口2{}

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

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

相关文章

开始数据治理时三个常见的陷阱和解决方法

当我们与客户合作帮助他们提高数据管理能力时,大多数部门都同意更好的数据治理将有助于解决他们的数据问题。然而,我们发现数据治理很少是优先事项,而且往往被搁置一旁,去支持更紧迫的业务工作。这有点像使用牙线——当你在牙医诊所时很容易获得动力,但当你回到家时很难保…

GC垃圾回收相关算法(宋红康JVM学习笔记)

什么是垃圾? 垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断的演进中,不同大小的设备、不同特征的应用…

[附源码]java毕业设计辽宁科技大学疫苗接种管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

果蔬同城配送小程序有什么作用_分享果蔬同城配送小程序的作用

1、蔬菜生鲜产品展示:用户打开买菜必备软件,就能查看琳琅满目的新鲜水果、蔬菜、肉类、零食等产品,为用户展示更多信息,提升用户下单率。经常更新商品的照片、视频,让客户可以在线浏览和挑选,足不出户就能买…

二叉树的最大深度(C++两种思路递归和层序)超详解小白入

原题链接–>戳这里直达 二叉树的最大深度深度搜索(递归)递归思想和详解C代码代码效率广度搜索(层序查找)层序查找的思路C代码代码效率总结深度搜索(递归) 最近新学习了树形结构,上课的时候听…

MATLAB算法实战应用案例精讲-【数模应用】随机梯度下降法(SGD)

前言 随机梯度下降算法(Stochastic gradient descent, SGD)源于1951年Robbins和Monro[6]提出的随机逼近, 最初应用于模式识别和神经网络. 这种方法在迭代过程中随机选择一个或几个样本的梯度来替代总体梯度, 从而大大降低了计算复杂度. 1958年Rosenblatt等研制出的感知机采用了…

JAVA开发(Redis使用缺陷场景)

常见的redis使用缺陷场景主要有3个,分别是缓存穿透,缓存击穿,缓存雪崩。 穿透,(关键词,缓存中没有的,数据也没有) 击穿(大量同时请求过期的key) 雪崩&…

多目标优化问题入门理论

0 前言 多目标优化在推荐系统、物流配送、路径规划等中有广泛的应用 一些多目标优化算法主要就是求解问题的 Pareto 前沿或者近似前沿。从目标空间来看,就是他的边界了。 1. 优化问题 1.1 无约束的单目标优化问题 minxf(x),x∈RN(1)min_x \quad f(x), x \in R^N…

解决jupyter TOC勾选了但不显示的问题

解决jupyter TOC勾选了但不显示的问题 有时候TOC(Table of content2)反应很慢,或者勾选了根本就不显示。或者隔三岔五nbextension消失,按以下步骤解决问题: #mermaid-svg-rbxou4Xusp7FoS9q {font-family:"trebuc…

ArcGIS pro底图大全

ArcGIS pro底图大全 Mid-Century Street World Topographic Map Navigation Map Street Night Terrain with label Oceans National graphic style map Modern antique 668753925730)] Modern antique

CAD中如何绑定外部参照和revit中链接CAD功能

一、CAD中如何绑定外部参照 首先我们要了解什么叫外部参照外部参照是指将一副图以参照的形式引用到另外一个或多个图形文件中,外部参照的每次改动后的结果都会及时的反映在最后一次被参照的图形中,另外使用外部参照还可以有效的减少图形的容量&#xff0…

Mockito的@Mock与@MockBean

在上文的 https://blog.csdn.net/dlf123321/article/details/127930378 里 大家初步会用mockito了 但是马上出现了一个问题。 package com.example.demo.controller;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.example.demo.entity.Per…

【算法】数组之二分查找移除元素

目录 1、数组理论基础 2、二分查找 2.1 区间左闭右闭写法 2.2 区间左闭右开写法 3、移除元素 3.1 暴力解法 3.2 双指针(快慢指针)法 1、数组理论基础 参考以前的博客:http://t.csdn.cn/HAVSF 2、二分查找 力扣https://leetcode.cn/p…

Denodo通过重要任命新增执行团队成员:Daniel Lender担任首席财务官,Stephen Welles担任首席法务官

韩国Pulmuone选择Aera Decision Cloud™来提升服务,降低成本,并支持可持续性 决策智能化公司Aera Technology今日宣布与韩国领先的生鲜食品公司、全球排名居首的豆腐生产商Pulmuone Co. Ltd.合作,帮助这家全球领军企业实现供应链决策智能化。…

数据结构之栈和队列

目录 1.栈的概念2、栈的实现 1、队列的概念2、队列的实现 今天介绍的是栈和队列。 先说栈吧。 1.栈的概念 栈也是线性表的一种,不过他较为特殊。他只能在一边进行数据的出入。也就是说晚进的数据先出去。进行数据进出的一端叫做栈顶,另一端叫做栈底…

从ReentrantReadWriteLock开始的独占锁与共享锁的源码分析

FBI WARNING(bushi) 当涉及sync调用时,并不会分析尝试获取和释放之后的后继逻辑,因为这个逻辑是由AQS类实现的。请看姊妹篇之并发入门组件AQS源码解析。 开始的开始是一个demo 以下的代码,会将独占锁持有5分钟&…

【LSTM实战】股票走势预测全流程实战(stock predict)

任务:利用LSTM模型预测2017年的股票中High的走势,并与真实的数据进行比对。数据:https://www.kaggle.com/datasets/princeteng/stock-predict 一、import packages|导入第三方库 import pandas as pd import matplotlib.pyplot as plt impo…

利用ESP32实现蓝牙通信的方法

​大家好,我是ST! 上次给大家分享了如何使用ESP32实现UDP通信,今天跟大家聊聊如何使用ESP32实现蓝牙通信。 目录 一、蓝牙简介 二、miropython有关蓝牙的实现方法 三、我的实验代码 四、手机调试APP 一、蓝牙简介 蓝牙是一种无线通讯技术&#xff…

Linux篇【5】:Linux 进程概念(三)

目录 四、进程状态 4.1、各个操作系统下的进程状态: 4.1.1、进程的运行态: 4.1.2、进程的终止态(退出态): 4.1.3、进程的阻塞态: 4.1.4、进程的挂起态: 4.2、Linux 操作系统下的进程状态: 四、进…

30、Java高级特性——Java API、枚举、包装类、装箱和拆箱

目录 课前先导: 一、Java API 1、API 2、Java API 3、Java API常用包 二、枚举类型 1、枚举 2、枚举类 3、代码演示 3.1 创建枚举类 3.2 创建测试类 4、MyEclipse创建枚举类的快捷方式 三、包装类 1、八大基本数据类型包装类 2、包装类中的构造方…