爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      【Java】枚举类基本使用

      首页 知识中心 软件开发 文章详情页

      【Java】枚举类基本使用

      2023-07-27 06:01:49 阅读次数:420

      javase,枚举

      1. 先看一个需求

      • 要求创建季节(Season) 对象,请设计并完成。
      public class Enumeration01 {
      public static void main(String[] args) {
      //使用
      Season spring = new Season("春天", "温暖");
      Season summer = new Season("夏天", "炎热");
      Season autumn = new Season("秋天", "凉爽");
      Season winter = new Season("冬天", "寒冷");

      //autumn.setName("XXX");
      //autumn.setDesc("非常的热..");

      //因为对于季节而已,它们的对象(具体值),是固定的四个,不会有更多
      //这个设计类的思路,不能体现季节是固定的四个对象
      //因此,这样的设计不好===> 枚举类[枚: 一个一个。 举: 例举。 即把具体的对象一个一个例举出来的类,就称为枚举类]
      //Season other = new Season("白天", "光明");

      }
      }

      class Season {//类
      private String name;
      private String desc;//描述

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

      public String getName() {
      return name;
      }

      public void setName(String name) {
      this.name = name;
      }

      public String getDesc() {
      return desc;
      }

      public void setDesc(String desc) {
      this.desc = desc;
      }
      }

      2. 分析问题

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

      3. 解决方案-枚举

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

      4. 枚举的两种种实现方式

      1. 自定义类实现枚举
      2. 使用​​enum​​ 关键字实现枚举

      4.1 自定义类实现枚举-应用案例

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

      System.out.println(Season.SPRING);
      System.out.println(Season.SUMMER);
      System.out.println(Season.AUTUMN);
      System.out.println(Season.WINTER);

      }
      }

      //演示自定义枚举实现
      class Season {//类
      private String name;
      private String desc;//描述

      //定义了四个对象,固定值
      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("冬天", "寒冷");


      //1. 将构造器私有化,目的是防止 直接 new
      //2. 去掉 setXxx 方法,防止属性被修改
      //3. 在 Season 内部,直接创固定的对象
      //4. 优化下:可以加入 final 修饰符
      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 + '\'' +
      '}';
      }
      }

      【Java】枚举类基本使用

      4.2 自定义类实现枚举–小结

      • 小结:进行自定义类实现枚举,有如下特点:
      1. 构造器私有化
      2. 本类内部创建一组对象【四个: 春夏秋冬】
      3. 对外暴露对象(通过为对象添加​​public final static​​ 修饰符)
      4. 可以提供​​get​​​ 方法,但是不要提供​​set​​ 方法

      4.3 enum 关键字实现枚举–快速入门

      • 说明:使用​​enum​​ 来实现前面的枚举案例,主要体会和自定义类实现枚举不同的地方。
      public class Enumeration03 {
      public static void main(String[] args) {

      System.out.println(Season.SPRING);
      System.out.println(Season.SUMMER);
      System.out.println(Season.AUTUMN);
      System.out.println(Season.WINTER);

      }
      }

      //演示enum关键字来实现枚举类
      enum Season {//类

      //如果使用 enum 来实现枚举类
      //1. 使用 enum 来替代 class
      //2. public static final Season SPRING = new Season("春天", "温暖"); 等价于
      // SPRING("春天", "温暖") 解读:常量名(实参列表)
      //3. 如果有多个常量(对象), 使用 "," 间隔
      //4. 如果使用 enum 来实现枚举,要求将定义常量对象,写在最前面
      SPRING("春天", "温暖"),
      SUMMER("夏天", "炎热"),
      AUTUMN("秋天", "凉爽"),
      WINTER("冬天", "寒冷")
      ;


      private String name;
      private String desc;//描述

      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 + '\'' +
      '}';
      }
      }

      【Java】枚举类基本使用

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

      1. 当我们使用​​enum​​​ 关键字开发一个枚举类时,默认会继承​​Enum​​​ 类, 而且是一个​​final​​ 类。
      • 证明如下:使用 ​​javap​​ (​反编译​​)工具来演示
        【Java】枚举类基本使用

      • 对 Season.class 进行反编译
        【Java】枚举类基本使用
        【Java】枚举类基本使用

      1. 传统的 ​​public static final Season2 SPRING = new Season2("春天", "温暖");​​​ 简化成: ​​SPRING("春天", "温暖")​​, 这里必须知道,它调用的是哪个构造器.。

      2. 如果使用无参构造器 创建 枚举对象,则实参列表和小括号都可以省略。
        【Java】枚举类基本使用

      3. 当有多个枚举对象时,使用“​​,​​​”间隔,最后有一个分号“​​;​​”结尾

      4. 枚举对象必须放在枚举类的行首。
        【Java】枚举类基本使用

      5. 案例——练习

      • 下面代码是否正确,并说明表示的含义?
      enum Gender{ 
      BOY, GIRL; //这里其实就是调用 Gender 类的无参构造器
      }
      1. 上面语法是 ok 的
      2. 有一个枚举类​​Gender​​, 没有属性。
      3. 有两个枚举对象​​BOY, GIRL​​,使用的无参构造器创建。
      • 下面代码输出什么?
      public class EnumExercise01 {
      public static void main(String[] args) {
      Gender boy = Gender.BOY;//OK
      Gender boy2 = Gender.BOY;//OK
      System.out.println(boy);//输出BOY //本质就是调用 Gender 的父类Enum的 toString()
      // public String toString() {
      // return name;
      // }
      System.out.println(boy == boy2); //true
      }
      }

      enum Gender{ //父类 Enum 的toString
      BOY , GIRL;
      }

      【Java】枚举类基本使用

      6. enum 常用方法

      • 说明:使用关键字​​enum​​​ 时,会隐式继承​​Enum​​​ 类,这样就可以使用​​Enum​​ 类相关的方法。
      public abstract class Enum<E extends Enum<E>>
      implements Comparable<E>, Serializable {
      }

      【Java】枚举类基本使用

      7. enum 常用方法应用实例

      1. ​​toString​​:Enum 类已经重写过了,返回的是当前对象名,子类可以重写该方法,用于返回对象的属性信息
      2. ​​name​​:返回当前对象名(常量名),子类中不能重写
      • 以​​Season​​ 枚举类,演示
      //演示enum关键字来实现枚举类
      enum Season {//类

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

      private String name;
      private String desc;//描述

      private 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 + '\'' +
      '}';
      }
      }

      public class EnumMethod {
      public static void main(String[] args) {

      //使用Season 枚举类,来演示各种方法
      Season autumn = Season.AUTUMN;
      //输出枚举对象的名字
      System.out.println(autumn.name());

      }
      }

      【Java】枚举类基本使用

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

      //ordinal() 输出的是该枚举对象的次序/编号,从0开始编号
      //AUTUMN 枚举对象是第三个,因此输出 2
      System.out.println(autumn.ordinal());

      【Java】枚举类基本使用

      1. ​​values​​:返回当前枚举类中所有的常量
      //从反编译可以看出 values方法,返回 Season2[]
      //含有定义的所有枚举对象
      Season[] values = Season.values();
      System.out.println("===遍历取出枚举对象(增强for)====");
      for (Season season: values) {//增强for循环
      System.out.println(season);
      }

      【Java】枚举类基本使用

      1. ​​valueOf​​:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常!
      //valueOf:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常
      //执行流程:
      //1. 根据你输入的 "AUTUMN" 到 Season2的枚举对象去查找
      //2. 如果找到了,就返回,如果没有找到,就报错
      Season autumn1 = Season.valueOf("AUTUMN");
      System.out.println("autumn1=" + autumn1);
      System.out.println(autumn == autumn1);

      【Java】枚举类基本使用

      1. ​​compareTo​​​:比较两个枚举常量,比较的就是编号,就是上面​​ordinal​​ 的编号
      //解读:
      //1. 就是把 Season.AUTUMN 枚举对象的编号 和 Season.SUMMER 枚举对象的编号比较
      //2. 源码:Season.AUTUMN的编号[2] - Season2.SUMMER的编号[1]
      /*
      public final int compareTo(E o) {

      return self.ordinal - other.ordinal;
      }
      Season2.AUTUMN的编号[2] - Season2.SUMMER的编号[1]
      */
      System.out.println(Season.AUTUMN.compareTo(Season.SUMMER));

      【Java】枚举类基本使用

      8. 练习

      1. 声明 Week 枚举类,其中包含星期一至星期日的定义;​​MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;​​​使用​​values​​​ 返回所有的枚举数组, 并遍历 , 输出如下图效果。
        【Java】枚举类基本使用
      public class EnumExercise02 {
      public static void main(String[] args) {
      //获取到所有的枚举对象, 即数组
      Week[] weeks = Week.values();
      //遍历,使用增强for
      System.out.println("===所有星期的信息如下===");
      for (Week week : weeks) {
      System.out.println(week);
      }
      }
      }

      enum Week {
      //定义Week的枚举对象
      MONDAY("星期一"),
      TUESDAY("星期二"),
      WEDNESDAY("星期三"),
      THURSDAY("星期四"),
      FRIDAY("星期五"),
      SATURDAY("星期六"),
      SUNDAY("星期日");

      private String name;

      private Week(String name) {//构造器
      this.name = name;
      }

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

      【Java】枚举类基本使用

      9. enum 实现接口

      1. 使用​​enum​​​ 关键字后,就不能再继承其它类了,因为​​enum​​​ 会隐式继承​​Enum​​,而 Java 是单继承机制。
      2. 枚举类和普通类一样,可以实现接口,如下形式。
      enum 类名 implements 接口1, 接口2 { }
      interface IPlaying {
      public void playing();
      }

      enum Music implements IPlaying {

      CLASSICMUSIC;

      @Override
      public void playing() {
      System.out.println("播放好听的音乐...");
      }
      }

      public class EnumDetail {
      public static void main(String[] args) {
      Music.CLASSICMUSIC.playing();
      }
      }

      【Java】枚举类基本使用

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/xdr630/5163615,作者:兮动人,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:【JavaSE】自定义异常

      下一篇:【Java】线程插队

      相关文章

      2025-05-14 10:07:38

      30天拿下Rust之枚举

      Rust中的枚举是一种用户定义的类型,它允许你为一组相关的值赋予友好的名称。在Rust中,枚举是强大的工具,它们不仅仅用于表示几个固定的值,还可以包含函数和方法,使得枚举成员可以有自己的行为。

      2025-05-14 10:07:38
      match , None , Rust , 代码 , 枚举 , 类型
      2025-05-07 09:10:01

      C语言:自定义类型——联合和枚举

      像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以是不同的类型。

      2025-05-07 09:10:01
      define , 大小 , 对齐 , 成员 , 枚举 , 类型 , 联合体
      2025-04-22 09:44:09

      【C语言:自定义类型(结构体、位段、共用体、枚举)】

      【C语言:自定义类型(结构体、位段、共用体、枚举)】

      2025-04-22 09:44:09
      位段 , 对齐 , 成员 , 枚举 , 结构
      2025-04-22 09:28:19

      策略模式的两种实现方式--枚举和map

      策略模式的两种实现方式--枚举和map

      2025-04-22 09:28:19
      map , 不同 , 接口 , 方法 , 枚举
      2025-04-15 09:20:33

      初学Java,EnumMap实现类(三十四)

      初学Java,EnumMap实现类(三十四)

      2025-04-15 09:20:33
      key , null , 枚举
      2025-04-15 09:20:07

      初学Java,枚举类(二十二)

      初学Java,枚举类(二十二)

      2025-04-15 09:20:07
      实例 , 属性 , 括号 , 枚举
      2025-04-15 09:19:05

      c语言中的联合体和枚举

      像结构体一样,联合体也是由一个或者多个成员构成,这些成员可以是不同的类型。但是编译器只为最大的成员分配足够的空间。联合体的特点是所有成员共用一块内存空间。所以也叫:共用体。给联合体赋值,其他成员的值也会跟着变化。

      2025-04-15 09:19:05
      对齐 , 成员 , 枚举 , 类型 , 联合体
      2025-04-09 09:17:07

      switch使用枚举类的提示 constant expression required

      switch使用枚举类的提示 constant expression required

      2025-04-09 09:17:07
      expression , switch , 枚举
      2025-04-01 10:28:25

      DP:简单多状态模型

      DP:简单多状态模型

      2025-04-01 10:28:25
      LeetCode , 力扣 , 枚举 , 状态
      2025-03-28 07:42:34

      for...in、for...of和其他循环的区别

      for...in、for...of和其他循环的区别

      2025-03-28 07:42:34
      Map , 对象 , 属性 , 数组 , 枚举 , 遍历
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5249069

      查看更多

      最新文章

      30天拿下Rust之枚举

      2025-05-14 10:07:38

      C语言:自定义类型——联合和枚举

      2025-05-07 09:10:01

      【C语言:自定义类型(结构体、位段、共用体、枚举)】

      2025-04-22 09:44:09

      策略模式的两种实现方式--枚举和map

      2025-04-22 09:28:19

      初学Java,EnumMap实现类(三十四)

      2025-04-15 09:20:33

      初学Java,枚举类(二十二)

      2025-04-15 09:20:07

      查看更多

      热门文章

      驱动开发:内核枚举ShadowSSDT基址

      2024-07-01 01:32:23

      驱动开发:内核特征码搜索函数封装

      2024-07-01 01:32:23

      驱动开发:内核枚举驱动内线程(答疑篇)

      2023-06-16 06:09:04

      Java的枚举类型用法介绍

      2023-06-01 06:30:49

      X64驱动:内核操作进线程/模块

      2023-07-20 06:06:15

      Java之单分支和双分支程序流程基本使用

      2023-07-28 08:28:12

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      策略模式的两种实现方式--枚举和map

      【JavaSE】封装基本使用

      【JavaSE】方法重写/覆盖(override)

      c语言中的联合体和枚举

      详细分析Js中的Object.entries()基本知识(附Demo)

      X64驱动:内核操作进线程/模块

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号