尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

重新认识枚举enum

重新认识枚举enum
📅 发布时间:2026/7/6 21:05:14

定义

在 Java 中,enum(枚举)是一种特殊的类,用于定义固定数量的常量集合。它从 JDK 5(Java 1.5) 开始引入,目的是替代传统的 public static final int 常量,提供类型安全、可读性强、功能丰富的常量管理方式

publicenumDay{MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;}

扩展

publicenumDay{MONDAY("MONDAY",0),TUESDAY("TUESDAY",1);}

相当于

publicfinalclassDayextendsjava.lang.Enum<Day>{publicstaticfinalDayMONDAY=newDay("MONDAY",0);publicstaticfinalDayTUESDAY=newDay("TUESDAY",1);// ... 其他常量privateDay(Stringname,intordinal){super(name,ordinal);}publicstaticDay[]values(){/* 返回所有常量 */}publicstaticDayvalueOf(Stringname){/* 根据名字返回常量 */}}

内置常用方法

方法作用示例
values()返回所有常量数组Day[] days = Day.values();
valueOf(String)根据名称返回常量Day d = Day.valueOf("MONDAY");
ordinal()返回声明索引Day.MONDAY.ordinal() → 0
name()返回常量名称Day.MONDAY.name() → "MONDAY"
compareTo()按声明顺序比较MONDAY.compareTo(TUESDAY) → -1

在 Java 中,枚举类(enum)的构造函数参数数量没有硬性限制

publicenumPlanet{EARTH(1,"blue",9.8,true,"Solar System",...);// 理论上可继续添加Planet(doublemass,Stringcolor,doublegravity,booleanhabitable,Stringsystem/*, ...*/){// 构造逻辑}}
问题说明
代码可读性崩溃超过 5-10 个参数已难以维护(违反 Clean Code 原则)
编译错误某些 IDE 或编译器可能提前报错(如 Eclipse 限制方法参数 ≤ 255,但实际更早失败)
字节码膨胀大量参数导致.class文件臃肿

添加字段,构造方法等

在 Java 中,enum(枚举)不仅可定义常量列表,还可以像普通类一样:

  • 添加字段(成员变量)
  • 定义构造函数
  • 声明方法(包括抽象方法)
  • 实现接口
    这使得 enum 非常强大,适用于需要为每个常量附加数据或行为的场景。
publicenumPlanet{// 枚举常量(必须在最前面,调用构造函数)MERCURY(3.303e+23,2.4397e6),VENUS(4.869e+24,6.0518e6),EARTH(5.976e+24,6.37814e6),MARS(6.421e+23,3.3972e6);// 字段(通常为 private final)privatefinaldoublemass;// 质量(kg)privatefinaldoubleradius;// 半径(m)// 构造函数(只能是 private 或 package-private,默认 private)Planet(doublemass,doubleradius){this.mass=mass;this.radius=radius;}// 方法publicdoublegetMass(){returnmass;}publicdoublegetRadius(){returnradius;}// 计算表面重力:g = G * M / r^2publicdoublesurfaceGravity(){return6.67300E-11*mass/(radius*radius);}// 计算某物体在该星球上的重量publicdoublesurfaceWeight(doubleotherMass){returnotherMass*surfaceGravity();}}
publicclassMain{publicstaticvoidmain(String[]args){Planetearth=Planet.EARTH;System.out.println("Earth's gravity: "+earth.surfaceGravity());System.out.println("My weight on Mars: "+Planet.MARS.surfaceWeight(70));// 70kg 人在火星的重量}}

内置常用方法

高级用法:每个常量有不同行为(抽象方法)

publicenumOperation{PLUS{publicdoubleapply(doublex,doubley){returnx+y;}},MINUS{publicdoubleapply(doublex,doubley){returnx-y;}},TIMES{publicdoubleapply(doublex,doubley){returnx*y;}},DIVIDE{publicdoubleapply(doublex,doubley){returnx/y;}};// 抽象方法 → 每个常量必须实现publicabstractdoubleapply(doublex,doubley);}
doubleresult=Operation.PLUS.apply(5,3);// 8.0
特性说明
枚举常量必须在第一行所有CONSTANT(...)必须出现在字段/方法之前
构造函数只能是private不能public或protected(防止外部 new)
字段建议用final枚举常量通常是不可变的
可以实现接口enum MyEnum implements Runnable { ... }
不能继承其他类因为enum隐式继承java.lang.Enum(Java 不支持多继承)
可以有静态方法/字段如values(),valueOf(String)是自动生成的

总结

Java 的 enum 远不止是“常量集合”,它是一个功能完整的类,支持:
字段 + 构造函数 + 方法 + 接口 + 多态行为
合理使用能让代码更安全、清晰、可维护,是 Java 中被低估的强大特性。

相关新闻

  • redis-lua错误处理与调试技巧:解决常见连接和操作问题的完整方案
  • IS31FL3731与PIC18F86K90的LED矩阵控制方案详解
  • Xenia Manager翻译贡献指南:如何为多语言支持添砖加瓦

最新新闻

  • 高精度电压管理的嵌入式系统设计与实现
  • Ubuntu 服务器性能监控:从 top 到 Glances 的 3 种方案部署与选型指南
  • XCVU13P FPGA 开发板选型指南:3款主流平台(FACE/ALINX/璞致)规格与接口对比
  • ClaudeCode实战指南:50条生产级AI编程提效技巧
  • CIFAR-10 数据集 PyTorch 加载:3种方法对比与 10 倍加速技巧
  • 小米三款TWS耳机深度拆解:从物理结构到算法逻辑的硬核对比

日新闻

  • AI智能体安全防护框架AgentGuard:从原理到实战部署指南
  • KMX63与PIC18F26K40硬件组合及低功耗设计实践
  • 基于YOLO13改进的门体检测模型:C3k2模块与PoolingFormer技术解析

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号