iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >【Java系列】深入解析枚举类型
  • 562
分享到

【Java系列】深入解析枚举类型

java开发语言枚举 2023-09-01 14:09:59 562人浏览 薄情痞子
摘要

序言 即便平凡的日子仿佛毫无波澜,但在某个特定的时刻,执着的努力便会显现出它的价值和意义。 希望这篇文章能让你不仅有一定的收获,而且可以愉快的学习,如果有什么建议,都可以留言和我交流 问题 思考一下这寄个问题,我们将围绕

序言

即便平凡的日子仿佛毫无波澜,但在某个特定的时刻,执着的努力便会显现出它的价值和意义。

希望这篇文章能让你不仅有一定的收获,而且可以愉快的学习,如果有什么建议,都可以留言和我交流

问题

思考一下这寄个问题,我们将围绕这三个问题来开始学习:

  • 什么是枚举
  • 怎么定义枚举
  • 枚举的使用场景

1 什么是枚举  

Java 枚举(Enum)是一种特殊的数据类型,它是一组预定义的常量,每个常量都有一个名称和一个值。

枚举类型在 Java 中被广泛使用,它可以用来代替常量、标志位、状态码等,使代码更加清晰、易读和易维护。

下面是 Java 枚举的详细介绍。

2 枚举的使用

定义枚举类型

在 Java 中,可以通过关键字 enum 来定义枚举类型。枚举类型的定义格式如下:

enum EnumName {    Constant1,    Constant2,    Constant3,    ...}

其中 EnumName 是枚举类型的名称,Constant1Constant2Constant3 等是枚举类型的常量。每个枚举常量都有一个名称和一个值,枚举常量的名称通常采用大写字母命名,多个单词之间用下划线分隔。

访问枚举常量

在 Java 中,可以通过枚举类型的名称来访问枚举常量。例如,假设有一个名为 Weekday 的枚举类型,可以通过如下方式来访问枚举常量:

Weekday monday = Weekday.Monday;

这里的 Weekday.Monday 表示 Weekday 枚举类型中的 Monday 常量。

枚举方法

枚举类型可以定义方法,这些方法可以在枚举常量上调用。例如,可以在 Weekday 枚举类型中定义一个 isWeekend 方法来判断当前枚举常量是否为周末:

enum Weekday {    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday;    public boolean isWeekend() {        return this == Saturday || this == Sunday;    }}

在上面的例子中,通过在枚举常量后面定义方法,可以在每个枚举常量上调用这个方法。例如,可以通过 Weekday.Saturday.isWeekend() 来判断 Saturday 是否为周末。

枚举构造器

枚举类型也可以定义构造器,这些构造器只能在枚举常量的定义中被调用,并且只能用来初始化枚举常量的值。例如,可以在 Weekday 枚举类型中定义一个带参数的构造器来设置枚举常量的值:

enum Weekday {    Monday("星期一"), Tuesday("星期二"), Wednesday("星期三"), Thursday("星期四"), Friday("星期五"), Saturday("星期六"), Sunday("星期日");    private String value;    private Weekday(String value) {        this.value = value;    }    public String getValue() {        return value;    }}

在上面的例子中,通过在枚举常量后面定义构造器,可以在枚举常量的定义中为枚举常量设置值。例如,可以通过 Weekday.Monday.getValue() 来获取 Monday 的值。

枚举实现接口

枚举类型也可以实现接口,这样每个枚举常量都会自动实现接口中的方法。例如,可以在 Weekday 枚举类型中定义一个接口,并让枚举类型实现这个接口:

interface Printable {    void print();}enum Weekday implements Printable {    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday;    @Override    public void print() {        System.out.println("Today is " + this.name());    }}

在上面的例子中,通过让 Weekday 枚举类型实现 Printable 接口,使得每个枚举常量都自动实现了 print 方法。例如,可以通过 Weekday.Monday.print() 来输出当前是星期几。

总结

总之,Java 枚举是一种强类型的数据类型,它提供了一种更加优雅、清晰和类型安全的方式来表示常量、状态码等。

枚举类型可以定义常量、方法、构造器和实现接口,这使得枚举类型非常灵活和功能强大。枚举类型在 Java 中的使用非常广泛,尤其在表示状态、选项等方面,可以极大地提高代码的可读性和易维护性。

2 案例

假设我们有一个游戏,游戏中有三个角色:战士、法师和牧师。每个角色都有自己的属性:血量、攻击力和防御力。

我们可以使用枚举类型来表示这三个角色,代码如下:

定义角色枚举 

public enum Role {    WARRioR("战士", 100, 50, 30),    MAGE("法师", 80, 70, 20),    PRIEST("牧师", 60, 30, 50);    private String name; // 角色名称    private int hp; // 角色血量    private int attack; // 角色攻击力    private int defense; // 角色防御力    // 构造方法    private Role(String name, int hp, int attack, int defense) {        this.name = name;        this.hp = hp;        this.attack = attack;        this.defense = defense;    }    // getter方法    public String getName() {        return name;    }    public int getHp() {        return hp;    }    public int getAttack() {        return attack;    }    public int getDefense() {        return defense;    }}

在上面的代码中,我们定义了一个名为Role的枚举类型,其中包含了三个枚举常量:WARRIOR、MAGE和PRIEST。每个枚举常量都有自己的属性:名称、血量、攻击力和防御力。我们还定义了一个构造方法,用于初始化这些属性。最后,我们为每个属性定义了getter方法,以便其他类可以访问这些属性。

 定义角色

现在,我们可以在其他类中使用Role枚举类型来表示游戏中的角色。例如,我们可以编写一个Player类来表示游戏中的玩家,代码如下:

public class Player {    private Role role; // 玩家角色    public Player(Role role) {        this.role = role;    }    public void attack(Player target) {        int damage = this.role.getAttack() - target.getRole().getDefense();        if (damage > 0) {            int newHp = target.getRole().getHp() - damage;            target.getRole().setHp(newHp);        }    }    public Role getRole() {        return role;    }    public void setRole(Role role) {        this.role = role;    }}

在上面的代码中,我们定义了一个名为Player的类,用来表示游戏中的玩家。每个玩家都有一个角色,我们使用Role类型的role字段来表示。在Player类的构造方法中,我们需要传入一个Role类型的参数来初始化玩家的角色。

Player类还有一个attack方法,用来实现玩家的攻击操作。在这个方法中,我们通过调用getAttack和getDefense方法来获取玩家的攻击力和防御力,然后计算出攻击造成的伤害。如果伤害值大于0,就更新目标玩家的血量。Player类还有一些getter和setter方法,用来访问和修改玩家的角色。

测试

现在,我们可以编写一个简单的测试类来测试上面的代码,代码如下:

public class GameTest {    public static void main(String[] args) {        Player player1 = new Player(Role.WARRIOR);        Player player2 = new Player(Role.MAGE);        System.out.println("玩家1选择了" + player1.getRole().getName());        System.out.println("玩家2选择了" + player2.getRole().getName());        player1.attack(player2);        System.out.println("玩家2的血量为:" + player2.getRole().getHp());    }}

在上面的代码中,我们创建了两个玩家,一个选择了战士角色,另一个选择了法师角色。然后,我们让玩家1攻击玩家2,并输出玩家2的血量。运行这个测试类,输出结果如下:

玩家1选择了战士玩家2选择了法师玩家2的血量为:60

从输出结果可以看出,玩家1的攻击对玩家2造成了伤害,玩家2的血量减少了攻击力减去防御力得到的伤害值,变成了60。

总结 

总的来说,这个案例中使用了枚举类型来表示游戏中的角色,每个角色都有自己的属性,并且可以在其他类中使用枚举类型来表示角色。通过这个案例,我们可以看到Java中枚举类型的使用非常灵活,可以用来表示任何有限的常量集合

图书推荐

Java28岁了,当打之年,并且还会打很多年。

为即将或正在使用Java的你推荐Java“此生错过必遗憾”系列书单。看看你还缺哪本?请补齐。

图书列表:

  • Java核心技术第12版开发基础+高级特性(套装共2册)
  • Java核心技术第11基础知识+高级特性(套装共2册)
  • Java编程思想[Thinking in Java]
  • Effective Java 中文版(原书第3版)
  • Java语言程序设计基础篇+进阶篇(原书第12版)(套装共2册)
  • Java并发编程实战
  • 软件架构实践(原书第4版)

Java核心技术第12版开发基础+高级特性(套装共2册)

Java四大名著之一Core Java最新版,一键打包全套2册!建议入门小白和准备升级到Java17的开发者购买。本书根据Java17新特性全面升级!赠送作者亲授视频课+海量代码集。

可先睹为快:《Java核心技术第12版开发基础+高级特性(套装共2册)》

 Java核心技术第11基础知识+高级特性(套装共2册)

“Java四大名著”之一Core Java次新版,一键打包全套2册!建议实际生产环境仍在使用Java8、Java11开发且暂时没有升级版本打算的开发者购买。本书基于Java9-11编写,赠送作者亲授视频课+海量代码集。

先睹为快:《Java核心技术 卷1 基础知识+Java核心技术 卷2 高级特性(原书第11版)

Java编程思想[Thinking in Java]

“Java四大名著”之一需要有一定编程基础的人才可阅读,即使很多内容还无法理解,但每次读完一定会有所收获。本书单最前面推荐的《Java核心技术》侧重技术,而《Java编程思想》侧重于“思想”,本书为你剖析Java中各个内容的设计理念。这是一本伴随我们技术成长的好书,买一本放在旁边,摸着就有底气。

限时秒杀链接:《Java编程思想(第4版)》

 

Effective Java 中文版(原书第3版)

Java之父James Gosling

“我很希望我10年前就能拥有这本书。有人可能认为我不需要任何Java方面的书籍,但是我需要这本书。”

“Java四大名著”之一适合已经掌握Java核心技术的程序员,想更加深入地了解Java编程语言的开发者阅读。针对如何编写高效、设计优良的程序提出了最实用、最权威的指导方针,通过90条简短、独立的经验法则,探索新的设计模式和语言习惯用法,帮你更加有效地使用Java编程语言及其基本类库,指引你少走弯路。这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。是Java开发人员案头上的一本不可或缺的参考书。

限时秒杀链接:《Effective Java中文版(原书第3版)》

 

Java语言程序设计基础篇+进阶篇(原书第12版)(套装共2册)

书相较于《Java核心技术》更加的基础,如果你阅读《Java核心技术》有些吃力,建议从本书读起。畅销20余年的“长城书”一键打包全套!被世界各地的大学选作教材,更新至Java9、10和11。本书通过示例讲解问题求解技巧,提供大量的程序清单,每章配有丰富的复习题和编程练习题,帮助读者掌握编程技术并解决实际开发中遇到的问题。

限时秒杀链接:《Java语言程序设计基础篇+进阶篇(原书第12版)(套装共2册)》

Java并发编程实战

让注重实战的你更快领悟Java并发编程的要领,快速构建大规模并发应用程序。“Java四大名著”之一《Effective Java》的作者Joshua Bloch参与编写。本书是java并发编程领域的里程碑著作!从并发编程的基本理论入手,逐步介绍了在设计Java并发程序时各种重要的设计原则、设计模式与思维模式。另一本蚂蚁金服方腾飞老师写的《Java并发编程的艺术》也适合一并阅读。

限时秒杀链接:《Java并发编程实战》

 

软件架构实践(原书第4版)

让你少走弯路的进阶架构师避坑指南!图书届奥斯卡Jolt大奖双冠王作品!全球10余个国家出版。卡内基梅隆等名校教材,IEEE杂志10佳图书,软件架构图书事实标准。

限时秒杀链接:《软件架构实践(原书第4版)》

参与方式

图书数量:本次送出 5 本   !!!⭐️⭐️⭐️
活动时间:截止到 2023-05-29 12:00:00

抽奖方式:

  • 3本,留言+该留言论赞数的前三名各获得一本!
  • 2本,评论区随机挑选小伙伴!
  • 留言内容:“祝Java28岁生日快乐!。+【你想要的书名】”


参与方式:关注博主、点赞、收藏,评论区留言 

中奖名单 

🍓🍓 获奖名单🍓🍓

 中奖名单:请关注博主动态

名单公布时间:2023-05-29 下午

中奖:

熬夜磕代码

YoLo

署前街的少年

就要吃苹果

JavaLearnerZGQ

请以上中奖小伙伴,及时联系博主

来源地址:https://blog.csdn.net/weixin_36755535/article/details/130831969

--结束END--

本文标题: 【Java系列】深入解析枚举类型

本文链接: https://www.lsjlt.com/news/388780.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 【Java系列】深入解析枚举类型
    序言 即便平凡的日子仿佛毫无波澜,但在某个特定的时刻,执着的努力便会显现出它的价值和意义。 希望这篇文章能让你不仅有一定的收获,而且可以愉快的学习,如果有什么建议,都可以留言和我交流 问题 思考一下这寄个问题,我们将围绕...
    99+
    2023-09-01
    java 开发语言 枚举
  • 【Java】枚举类型
    文章目录 一、枚举类型1.1 什么是枚举类型1.2 Java中枚举类型的特点 二、枚举类型的使用2.1 创建语法2.2 常用方法2.3 使用案例 三、枚举的优缺点 一、枚举类型 ...
    99+
    2023-09-02
    java enum 枚举
  • 深入浅出讲解Java中的枚举类
    目录一、枚举类的使用 二、如何定义枚举类 背景:类的对象只有有限个,确定的。举例如下: > 星期: Monday (星期一)、….、 Sunday (星期天) > 性别:...
    99+
    2024-04-02
  • java枚举类型-Enum
    目录前言 应用 定义 基本Enum特性 Enum的静态导入 Enum中添加新方法 Switch语句中的Enum Enum的继承 EnumSet的使用 EnumMap的使用 常量相关方...
    99+
    2024-04-02
  • Python深入浅出分析enum枚举类
    目录枚举类Enum总结枚举类Enum 枚举类,在企业开发中用的比较多 当我们需要定义常量时,一个办法是用大写的变量通过整数来定义,例如月份: # 当项目中需要使用12个月份时JAN ...
    99+
    2024-04-02
  • 进阶JAVA篇-深入了解枚举与抽象枚举
    目录       介绍一下枚举:           1.1枚举的概念           1.2具体如何来使用呢?           1.3对枚举小结           1.4抽象枚举概念           1.5对抽象枚举小结 ...
    99+
    2023-10-23
    java 开发语言
  • C#枚举类型举例分析
    本篇内容主要讲解“C#枚举类型举例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#枚举类型举例分析”吧!C#枚举类型实例演示  using System&nb...
    99+
    2023-06-17
  • 深入理解C#之枚举
    目录一、在学习枚举之前,首先来听听枚举的优点。二、枚举说明1、简单枚举2、标志枚举三、枚举的使用建议总结一、在学习枚举之前,首先来听听枚举的优点。 1、枚举能够使代码更加清晰,它允许...
    99+
    2024-04-02
  • java中枚举类型定义和重写枚举的示例分析
    这篇文章将为大家详细讲解有关java中枚举类型定义和重写枚举的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是枚举类型枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用...
    99+
    2023-05-30
    java
  • Java枚举类型与泛型使用解读
    目录一、枚举类型1、使用枚举类型设置常量2、枚举类型常用方法3、枚举类型中的构造方法二、泛型1、泛型的常规用法2、泛型的高级用法总结一、枚举类型 1、使用枚举类型设置常量 以往设置常...
    99+
    2022-12-28
    Java枚举类型 Java泛型 Java枚举类型与泛型
  • 详解 TypeScript 枚举类型
    目录1. 数字枚举2. 字符串枚举3. 反向映射4. 异构枚举5. 常量枚举6. 枚举成员类型和联合枚举类型(1)枚举成员类型(2)联合枚举类型7. 枚举合并前言: TypeScri...
    99+
    2024-04-02
  • 如何分析TypeScript枚举类型
    这篇文章给大家介绍如何分析TypeScript枚举类型,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.概述所谓的枚举类型就是为一组数值赋予名字。enum类型在C++、Java语言中比较常见,TypeScript在Ja...
    99+
    2023-06-22
  • java中有哪些枚举类型
    这篇文章给大家介绍java中有哪些枚举类型,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、Color枚举类就是class,而且是一个不可以被继承的final类。其枚举值(RED,BLUE.。.)都是Color类型的类...
    99+
    2023-06-17
  • Java浅析枚举类的使用
    目录1、枚举规则2、枚举的个数3、枚举类中常用函数4、实现枚举类5、枚举类的使用注意事项概念:有enum关键字修饰的类,成为枚举类 1、枚举规则 枚举类的对象可以有类里面定义,不支持...
    99+
    2024-04-02
  • C#枚举类型的实例分析
    本篇内容主要讲解“C#枚举类型的实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#枚举类型的实例分析”吧!C#枚举类型实例是你学习C#枚举类型的捷径,那让我们开始吧:public&nbs...
    99+
    2023-06-17
  • 【Java系列】深入解析Stream API
    序言 你只管努力,其他交给时间,时间会证明一切。 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记论点蓝色:用来标记论点 希望这篇文章能让你不仅有一定的收获,而且可以愉快的学习,如果有什么建议,都可以留...
    99+
    2023-09-01
    java 算法 python
  • Python 枚举类源码解析
    元类编程,生成类的类,可以动态生成类。 用法: type(name, bases, dict) name -> 类名: str bases -> 基类: tuple dict -> 属性: dict EnumMeta元...
    99+
    2023-01-30
    源码 Python
  • 详解Python中的枚举类型
    目录什么是枚举类型为什么要使用枚举如何使用枚举从字典创建枚举最后的话你好,我是 征哥,今天分享一下 Python 中的枚举类型,为什么需要枚举类型,及如何使用。 什么是枚举类型 枚举...
    99+
    2024-04-02
  • 如何理解TypeScript枚举类型
    本篇内容主要讲解“如何理解TypeScript枚举类型”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解TypeScript枚举类型”吧!前言:TypeScript 在 ES 原有类型基础上...
    99+
    2023-06-25
  • 【Java系列】深入解析Java多线程
    序言 你只管努力,其他交给时间,时间会证明一切。 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记一级重要蓝色:用来标记二级重要 希望这篇文章能让你不仅有一定的收获,而且可以愉快的学习,如果有什么建议...
    99+
    2023-08-31
    java 开发语言 jvm
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作