面向对象【枚举类】

请添加图片描述

文章目录

  • 枚举类
    • 定义枚举类
    • enum 方式定义的要求和特点
  • enum 中常用方法
    • 实现接口的枚举类

枚举类

枚举类是一种特殊的类,它用于定义一组固定数量的常量。枚举类在实际开发中非常有用,因为它们可以增加代码的可读性和可维护性。本文将介绍Java枚举类的定义、常用方法以及一些最佳实践。

枚举类的主要作用有以下几个方面:

  1. 定义常量集合: 枚举类可以用于定义一组有限的常量集合,例如一周的每一天、星期几、颜色等。这样的定义可以提高代码的可读性,因为它们明确了程序员的意图,并且避免了使用散列常量或者魔术数字。

  2. 类型安全性: 枚举类提供了类型安全性,即编译器可以确保在使用枚举常量时不会出现拼写错误或者非法值。因为枚举常量在编译时就已经确定,所以不会出现运行时错误。

  3. 简化代码: 枚举类可以帮助简化代码,因为它们自动提供了一些常用的方法,如比较、遍历等。此外,枚举常量本身也可以具有属性和方法,使得代码更加灵活和易于维护。

  4. 替代常量集合: 在传统的Java编程中,常常使用整型常量或者字符串常量来表示一组相关的常量。然而,这种方式存在着不便利和易出错的问题。枚举类提供了一种更加优雅和类型安全的替代方案。

  5. switch语句的替代: 枚举类在替代复杂的switch语句时非常有用。通过将每个case与一个枚举常量相关联,可以使代码更加清晰和易于理解。

定义枚举类

在Java中,使用enum定义枚举类。例如:

public enum ClassName {
    CONSTANT1,   // 枚举常量1
    CONSTANT2,   // 枚举常量2
    // 更多枚举常量
}

public enum Day {
    MONDAY, 
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
}

定义了一个Day枚举类,其中包含了一周的每一天作为常量。注意,这些常量默认都是public static final类型的,因此可以在其他类中直接访问。

enum 方式定义的要求和特点

  • 枚举类的常量对象列表必须在枚举类的首行,因为是常量,所以建议大写。
  • 列出的实例系统会自动添加 public static final 修饰。
  • 如果常量对象列表后面没有其他代码,那么“;”可以省略,否则不可以省略“;”。
  • 编译器给枚举类默认提供的是 private 的无参构造,如果枚举类需要的是无参构造,
    就不需要声明,写常量对象列表时也不用加参数
  • 如果枚举类需要的是有参构造,需要手动定义,有参构造的 private 可以省略,调用
    有参构造的方法就是在常量对象名后面加(实参列表)就可以。
  • 枚举类默认继承的是 java.lang.Enum 类,因此不能再继承其他的类型。
  • • JDK5.0 之后 switch,提供支持枚举类型,case 后面可以写枚举常量名,无需添加枚
    举类作为限定。

enum 中常用方法

枚举类提供了一些常用的方法来处理枚举常量

  1. values()

values()方法返回枚举类中定义的所有枚举常量的数组。这个方法非常有用,可以用于遍历枚举常量。

public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}

// 使用values()方法遍历枚举常量
for (Day day : Day.values()) {
    System.out.println(day);
}
  1. ordinal()

ordinal()方法返回枚举常量在枚举中的位置,位置从0开始计数。通常情况下,枚举常量的顺序是它们在枚举类中定义的顺序。

Day day = Day.MONDAY;
System.out.println(day.ordinal()); // 输出 0
  1. name()

name()方法返回枚举常量的名称。

Day day = Day.MONDAY;
System.out.println(day.name()); // 输出 MONDAY
  1. valueOf(String name)

valueOf(String name)方法根据指定的名称返回相应的枚举常量。这个方法通常与枚举类的名称一起使用。

Day day = Day.valueOf("MONDAY");
System.out.println(day); // 输出 MONDAY
  1. toString()

toString()方法返回枚举常量的字符串表示形式。默认情况下,它返回枚举常量的名称。

Day day = Day.MONDAY;
System.out.println(day.toString()); // 输出 MONDAY

实现接口的枚举类

枚举类可以实现一个或多个接口。在Java中,枚举类与普通类一样,可以实现接口,这使得枚举类可以拥有接口的所有特性和方法。

假设有一个接口Shape表示形状,并且有一个枚举类Color表示颜色,我们可以让Color枚举类实现Shape接口,以便为每种颜色指定特定的形状

public interface Shape {
    void draw();
}

public enum Color implements Shape {
    RED {
        @Override
        public void draw() {
            System.out.println("Draw a red shape");
        }
    },
    GREEN {
        @Override
        public void draw() {
            System.out.println("Draw a green shape");
        }
    },
    BLUE {
        @Override
        public void draw() {
            System.out.println("Draw a blue shape");
        }
    };
}

public class Main {
    public static void main(String[] args) {
        Color.RED.draw();
        Color.GREEN.draw();
        Color.BLUE.draw();
    }
}

// 输出结果:
// Draw a red shape
// Draw a green shape
// Draw a blue shape

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[网鼎杯2018]Unfinish 两种方法 -----不会编程的崽

网鼎杯太喜欢搞二次注入了吧。上次是无列名盲注,这次又是二次注入盲注。。。不知道方法还是挺难的。哎,网鼎嘛,能理解透彻就很强了。能自己做出来那可太nb了。 又是熟悉的登录框。不知道这是第几次看见网鼎杯的登录框了。后台扫描一下&#x…

基于深度学习的海洋鱼类识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ............................................................ % 对测试集进行分类预测 [Pr…

西安石油大学校赛培训(1)数学模型简介 初等模型

数学建模竞赛 什么是数学建模竞赛?数学竞赛给人的印象是高深莫测的数学难题,和一个人、一支笔、一张纸,关在屋子里的冥思苦想,它训练严密的逻辑推理和准确的计算能力,而数学建模竞赛从内容到形式与此都有明显的不同。 数学建模竞赛的题目由日…

高防服务器、高防IP、高防CDN的工作原理是什么

高防IP高防CDN我们先科普一下是什么是高防。“高防”,顾名思义,就犹如网络上加了类似像盾牌一样很高的防御,主要是指IDC领域的IDC机房或者线路有防御DDOS能力。 高防服务器主要是比普通服务器多了防御服务,一般都是在机房出口架设…

学点儿Java_Day10_集合框架(List、Set、HashMap)

1 简介 ArrayList: 有序(放进去顺序和拿出来顺序一致),可重复 HashSet: 无序(放进去顺序和拿出来顺序不一定一致),不可重复 Testpublic void test1() {String[] array new String[3];//List: 有序 可重复//有序: 放入顺序 与 拿出顺序一致,…

Github多账号共存

在开发阶段,如果同时拥有多个开源代码托管平台的账户,在代码的管理上非常麻烦。那么,如果同一台机器上需要配置多个账户,怎样才能确保不冲突,不同账户独立下载独立提交呢? 我们以两个github账号进行演示 …

基于STM32的最小系统电路设计(手把手零基础教学)

文章目录 前言一、复位电路二、晶振电路三、电源转换电路四、SWD下载电路五、LED测试电路六、芯片外扩引脚七、STM32微控制电路总结 前言 在上篇介绍完《STM32的核心板制作流程》后,本篇我们将开始学习STM32最小系统电路的设计。具体包括复位电路、晶振电路、电源转…

快速入门go语言

环境搭建 编译器安装 1、编译器下载地址 2、打开命令行模式,输入go version ide安装 ide下载地址 依赖管理 goproxy 1、goproxy代理地址 // 阿里云 https://mirrors.aliyun.com/goproxy // 微软 https://goproxy.io // 七牛 https://goproxy.cn 2、ide配置g…

io的学习4

打印流 分类:打印流一般是指:PrintStream、PrintWriter两个类 特点: 1.打印流只操作文件目的地,不操作数据源 2.特有的写出方法可以实现,数据原样写出 3.特有的写出方法,可以实现自动刷新,…

openGauss + Datakit搭建openGauss运维平台

系统架构OS 硬件需求:2c4g [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]# uname -m x86_64 [rootlocalhost ~]# hostname -I 192.168.92.32 下载地址:https://opengauss.org/zh/download/ 下载…

软考高级架构师:MVP 架构概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

Vue3+Element Plus+TS开发企业管理后台(一)

系列文章,讲述一个企业管理后台的前后端设计,持续集成常见的页面功能和服务端设计思路。 效果展示 支持多种布局、主题配色随意切换 侧边菜单背景设置 主题色调切换 移动端完美适配 菜单侧边收起,适合移动端小空间场景。 功能开发计划 #merm…

YOLOv9代码解读[01] readme解读

文章目录 YOLOv9COCO数据集上指标:环境安装训练验证重参数化 Re-parameterization推断相关链接 YOLOv9 paper: YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information github: https://github.com/WongKinYiu/yolov9 COCO数据集上指…

virtualBox:新增NVMe控制器报错:VERR_PDM_DEVICE_NOT_FOUND

目录 1.virtualBox:版本:6.1 2.虚拟机配置:增加了一个NVMe协议的控制器,并增加了一块VDI的虚拟磁盘空间 3.确定报错弹框信息: 4.解决方案:根据提示信息,前往挂网下载扩展插件包,下载好并将其…

flask_restful规范返回值之参数设置

设置重命名属性和默认值 使用 attribute 配置这种映射 , 比如: fields.String(attributeusername) 使用 default 指定默认值,比如: fields.String(defaultsxt) from flask import Flask,render_template from flask_restful import A…

Kevin的128纪念日

上面这个是我在三天前做的一个开场白一样的封面。在设计的时候我的想法很简单,把自己给展现出来。我没有去过多的加其他花花绿绿的东西,我想把我本身的状态和形象给凸显出来。 哈哈~看到这里有人就想问,这个躺在沙发上吃零食的懒猫就是你的个…

DMA控制器

前言 大家好,我是jiantaoyab,这是我作为学习笔记的25篇,本篇文章给大家介绍DMA。 无论 I/O 速度如何提升,比起 CPU,总还是太慢。如果我们对于 I/O 的操作,都是由 CPU 发出对应的指令,然后等待…

conda 查看激活自己的新环境,labelImg的使用

查看环境目录 我们可以在基础环境中查看我们有几个环境 conda env list 激活新环境 我们激活pytorch环境pytorch conda activate pytorch 在新环境下安装 然后我们安装labelImg(Python3.10以上会报错) pip install labelImg 新环境下打开 labelImg …

4.3 函数call,ret指令

汇编语言 1. 把循环执行ax的值右移一位的方法用函数封装起来 用汇编语言函数封装的方法实现计算2^12 assume cs:codesg codesg segmentmov ax,2mov cx,11call s //调用函数sint 21hs:add ax,axloop s //循环sret //返回值codesg ends end2. call,ret…

开源 OLAP 及其在不同场景下的需求

目录 一、开源 OLAP 综述 二、OLAP场景思考 2.1 面向客户的报表 2.2 面向经营的报表 2.3 末端运营分析 2.4 用户画像 2.5 订单分析 2.6 OLAP技术需求思考 三、开源数据湖/流式数仓解决方案 3.1 离线数仓体系——Lambda架构 3.2 实时数据湖解决方案 3.3 实时分析解决…