Java中的枚举

JAVA的枚举 本例和上例的执行结果完全相同。 阅读详情
一、定义:实际上类似一个普通的java类,但在这个java类中被赋予了一种规范,在枚举中所有的元素都被设置为final常量,构造方法设置成为私有化。也就是把自己的所有成分封装起来。(答案非常不全面)
较为全面的:
     Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class, 它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。 当我们在声明一个enum类型时,我们应该注意到enum类型有如下的一些特征。     
    
     1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例。     
    
     2.所有枚举值都是public    ,    static    ,    final的。注意这一点只是针对于枚举值,我们可以和在普通类里面定义    变量一样定义其它任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。     
    
     3.Enum默认实现了java.lang.Comparable接口。     
    
     4.Enum覆载了了toString方法,因此我们如果调用Color.Blue.toString()默认返回字符串”Blue”.     
    
     5.Enum提供了一个valueOf方法,这个方法和toString方法是相对应的。调用valueOf(“Blue”)将返回Color.Blue.因此我们在自己重写toString方法的时候就要注意到这一点,一把来说应该相对应地重写valueOf方法。     
    
     6.Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值。     
    
     7.Enum还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定,这里Color.Red.ordinal()返回0。     
    
     了解了这些基本特性,我们来看看如何使用它们。     
    
     1.遍历所有有枚举值.    知道了有values方法,我们可以轻车熟路地用ForEach循环来遍历了枚举值了。     
    
     for    (Color    c:    Color.values())     
     System.out.println(“find    value:”    +    c);     
    
     2.在enum中定义方法和变量,比如我们可以为Color增加一个方法随机返回一个颜色。     
    
     public    enum    Color    {     
     Red,     
     Green,     
     Blue;     
    
     /*     
     *定义一个变量表示枚举值的数目。     
     *(我有点奇怪为什么sun没有给enum直接提供一个size方法).     
     */     
     private    static    int    number    =    Color.values().length    ;     
    
     /**     
     *    随机返回一个枚举值     
     @return    a    random    enum    value.     
     */     
     public    static    Color    getRandomColor(){     
     long    random    =    System.currentTimeMillis()    %    number;     
     switch    ((int)    random){     
      case    0:     
       return    Color.Red;     
      case    1:     
       return    Color.Green;     
      case    2:     
       return    Color.Blue;     
      default    :    return    Color.Red;     
     }     
     }     
     }     
    
     可以看出这在枚举类型里定义变量和方法和在普通类里面定义方法和变量没有什么区别。唯一要注意的只是变量和方法定义必须放在所有枚举值定义的后面,否则编译器会给出一个错误。     
    
     3.覆载(Override)toString,    valueOf方法     
    
     前面我们已经知道enum提供了toString,valueOf等方法,很多时候我们都需要覆载默认的toString方法,那么对于enum我们怎么做呢。其实这和覆载一个普通class的toString方法没有什么区别。     
    
     ….     
     public    String    toString(){     
     switch    (this){     
     case    Red:     
      return    "Color.Red";     
     case    Green:     
      return    "Color.Green";     
     case    Blue:     
      return    "Color.Blue";     
     default:     
      return    "Unknow    Color";     
     }     
     }     
     ….     
    
     这时我们可以看到,此时再用前面的遍历代码打印出来的是     
    
     Color.Red     
     Color.Green     
     Color.Blue     
    
     而不是     
    
     Red     
     Green     
     Blue.     
    
     可以看到toString确实是被覆载了。一般来说在覆载toString的时候我们同时也应该覆载valueOf方法,以保持它们相互的一致性。     
    
     4.使用构造函数     
    
     虽然enum不可以有public的构造函数,但是我们还是可以定义private的构造函数,在enum内部使用。还是用Color这个例子。     
    
     public    enum    Color    {     
     Red("This    is    Red"),     
     Green("This    is    Green"),     
     Blue("This    is    Blue");     
    
     private    String    desc;     
    
     Color(String    desc){     
     this.desc    =    desc;     
     }     
    
     public    String    getDesc(){     
     return    this.desc;     
     }     
    
     }     
    
     这里我们为每一个颜色提供了一个说明信息,    然后定义了一个构造函数接受这个说明信息。     
    
     要注意这里构造函数不能为public或者protected,    从而保证构造函数只能在内部使用,客户代码不能new一个枚举值的实例出来。这也是完全符合情理的,因为我们知道枚举值是public    static    final的常量而已。     
    
     5.实现特定的接口     
    
     我们已经知道enum可以定义变量和方法,它要实现一个接口也和普通class实现一个接口一样,这里就不作示例了。     
    
     6.定义枚举值自己的方法。     
    
     前面我们看到可以为enum定义一些方法,其实我们甚至可以为每一个枚举值定义方法。这样,我们前面覆载    toString的例子可以被改写成这样。     
    
     public    enum    Color    {     
     Red    {     
     public    String    toString(){     
      return    "Color.Red";     
     }     
     },     
     Green    {     
     public    String    toString(){     
      return    "Color.Green";     
     }     
     },     
     Blue{     
     public    String    toString(){     
      return    "Color.Blue";     
     }     
     };     
     }     
    
     从逻辑上来说这样比原先提供一个“全局“的toString方法要清晰一些。     
    
     总的来说,enum作为一个全新定义的类型,是希望能够帮助程序员写出的代码更加简单易懂,个

人觉得一般也不需要过多的使用enum的一些高级特性,否则就和简单易懂的初衷想违背了。

二、Java枚举常见的其中用法:
     

JDK1.5引入了新的类型——枚举。在Java中它虽然算个“小”功能,却给我的开发带来了“大”方便。

用法一:常量

在JDK1.5之前,我们定义常量都是:publicstaticfianl....。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

Java代码   复制代码
  1. public enum Color {
  2. RED, GREEN, BLANK, YELLOW
  3. }

用法二:switch

JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。

Java代码  
  1. enum Signal {
  2. GREEN, YELLOW, RED
  3. }
  4. public class TrafficLight {
  5. Signal color = Signal.RED;
  6. public void change() {
  7. switch (color) {
  8. case RED:
  9. color = Signal.GREEN;
  10. break;
  11. case YELLOW:
  12. color = Signal.RED;
  13. break;
  14. case GREEN:
  15. color = Signal.YELLOW;
  16. break;
  17. }
  18. }
  19. }

用法三:向枚举中添加新方法

如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且Java要求必须先定义enum实例。

Java代码  
  1. public enum Color {
  2. RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
  3. // 成员变量
  4. private String name;
  5. private int index;
  6. // 构造方法
  7. private Color(String name, int index) {
  8. this.name = name;
  9. this.index = index;
  10. }
  11. // 普通方法
  12. public static String getName(int index) {
  13. for (Color c : Color.values()) {
  14. if (c.getIndex() == index) {
  15. return c.name;
  16. }
  17. }
  18. return null;
  19. }
  20. // get set 方法
  21. public String getName() {
  22. return name;
  23. }
  24. public void setName(String name) {
  25. this.name = name;
  26. }
  27. public int getIndex() {
  28. return index;
  29. }
  30. public void setIndex(int index) {
  31. this.index = index;
  32. }
  33. }

用法四:覆盖枚举的方法

下面给出一个toString()方法覆盖的例子。

Java代码  
  1. public enum Color {
  2. RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
  3. // 成员变量
  4. private String name;
  5. private int index;
  6. // 构造方法
  7. private Color(String name, int index) {
  8. this.name = name;
  9. this.index = index;
  10. }
  11. //覆盖方法
  12. @Override
  13. public String toString() {
  14. return this.index+"_"+this.name;
  15. }
  16. }

用法五:实现接口

所有的枚举都继承自java.lang.Enum类。由于Java不支持多继承,所以枚举对象不能再继承其他类。

Java代码  
  1. public interface Behaviour {
  2. void print();
  3. String getInfo();
  4. }
  5. public enum Color implements Behaviour{
  6. RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
  7. // 成员变量
  8. private String name;
  9. private int index;
  10. // 构造方法
  11. private Color(String name, int index) {
  12. this.name = name;
  13. this.index = index;
  14. }
  15. //接口方法
  16. @Override
  17. public String getInfo() {
  18. return this.name;
  19. }
  20. //接口方法
  21. @Override
  22. public void print() {
  23. System.out.println(this.index+":"+this.name);
  24. }
  25. }

用法六:使用接口组织枚举

Java代码  
  1. public interface Food {
  2. enum Coffee implements Food{
  3. BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
  4. }
  5. enum Dessert implements Food{
  6. FRUIT, CAKE, GELATO
  7. }
  8. }

用法七:关于枚举集合的使用


java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的key是enum类型,而value则可以是任意类型。关于这个两个集合的使用就不在这里赘述,可以参考JDK文档。


Java枚举—枚举进阶 上一节我们讲了[枚举初识]里面主要讲了枚举的实现原理,我们从编译器的角度看了枚举的底层实现以及枚举常用的方法 今天我们看一下枚举添加自定义方法和构造函数,枚举的抽象和接口,枚举与switch 和基于枚举的单例,之后我们会讲解两个和枚举相关的数据结构EnumMap 和EnumSet 阅读详情

相关推荐

Java枚举—枚举初识

1. **枚举的好处**:可以将常量组织起来,统一进行管理 枚举的典型应用场景 **错误码、状态机等**。 2. 枚举的使用方法很简单,只需要使用enum 关键字申明即可 3. 枚举的底层原理是继承了Enum 抽象类,编译器最终会将枚举编译成一个普通的Java类供Java 虚拟机使用 4. 枚举中申明的变量都是有类型的,那就是该枚举类型(其实也是一个普通的java类)

4万+

JAVA ENUM枚举类实现接口类有什么好处?

经过网络查找的解答就是为了单例。 枚举类可以实现接口,但要求枚举中的每个对象都必须覆写接口中的方法。 枚举类中可以定义抽象方法,但要求枚举中的每个对象都必须覆写方法。 以下是示例: public interface CustomerPushService { /** * 获取需要推送的用户ID集合 * @param custId * @return */ Set<Integer> getPushUserArchiveIds(Integer

u013343616的博客 982

GPD源码分析

gpd使用示例 先看下面一段代码,为标准gpd算法的使用方法,可以看到输入为点云,cloud_camera_; 输入:std::unique_ptr<gpd::util::Cloud> cloud_camera_ 输出: std::vector<std::unique_ptr<gpd::candidate::Hand>> grasps; // detect grasp poses gpd对象:std::unique_ptr<gpd::GraspDetect.

weixin_41003113的博客 2335

java枚举优点

枚举优点 1 增强代码可读性 2传递参数错误 3去除equals两者判断由于常量值地址唯一,使用枚举可以直接通过“==”进行两个值之间的对比,性能会有所提高。 4编译优势(与常量类相比) 常量类编译时,常量被直接编译进二进制代码中,常量值在升级中变化后,需要重新编译引用常量的类,因为二进制代码中存放的是旧值。枚举类编译时,没有把常量值编译到代码中,即使常量值发生改变,也不会影响引...

李度的博客 3164

简单说说Python中的pip如何换源

【安装包】:pip install 【升级包】:pip install --upgrade 【卸载包】:pip uninstall 【查看已安装的包】:pip list【搜索包】:pip search (注意:pip search功能在pip 10.0.0之后被弃用,建议使用其他方式搜索包,如访问PyPI官网或使用其他搜索引擎)

一捌柒的博客 2668

TouchGFX在STM32上的移植全过程:超详细版指南

深入讲解将TouchGFX集成到STM32开发环境的每一步,涵盖配置、驱动适配与UI调试。无论是初学者还是进阶开发者,都能快速掌握TouchGFX在嵌入式平台的应用技巧。

weixin_42443533的博客 600

java enum_Java 枚举实战

摘要:本文主要讨论生产环境中枚举类的使用。首先会通过对枚举类概念进行简单的介绍,引入我们讨论的主题;然后就直接进入实战部分,本文只会介绍在实战中用的比较多,也比较常用的情况,所以希望老铁可以用心体会并实践,最终化为己有;最后会大致在对枚举的 API 做了一个简单的介绍。其余没有介绍的内容,基本上在我们的生产环境中极少用到,如果有兴趣的可以自己在深入研究。枚举概念:枚举类型是 Java 5 中新增特...

weixin_32571629的博客 215

Android 16(API 36)状态栏颜色适配全攻略:从沉浸式到自定义背景

本文全面解析Android 16(API 36)强制沉浸式状态栏带来的适配挑战,提供了从FrameLayout包裹法到动态修改Window背景色的核心解决方案。针对传统状态栏颜色设置失效问题,详细阐述了如何利用WindowInsets API实现自定义背景,并涵盖全屏模式、Fragment切换及第三方ROM兼容性等实战场景,为开发者提供一站式适配指南。

weixin_29227425的博客 596

java 实现枚举_java枚举的实现原理

基本使用首先,所有枚举类型都有一个基类:java.lang.Enum抽象类,里面提供了一些基础属性和基础方法。枚举类型不仅可以定义枚举常量,还可以定义属性、构造方法、普通方法、抽象方法等,比如,我们定义了一个包含成员变量,构造方法以及抽象方法的四则运算操作符枚举类型:public enum Operator {ADD("+") {@Overridepublic int calculate(int ...

weixin_40000702的博客 309

《Kubernetes部署篇:基于x86_64+aarch64架构CPU+containerd一键离线部署容器版K8S1.33.3高可用集群》

《Kubernetes部署篇:基于x86_64+aarch64架构CPU+containerd一键离线部署容器版K8S1.33.3高可用集群》

东城绝神 1369

YOLOv11模型改进全攻略:利用轻量化模块实现精度与速度双跃升

如果你在实操中遇到模块替换导致的精度骤降或部署报错,不妨尝试调整轻量化模块的替换比例,或针对性地保留关键层的原始结构。记住,轻量化的核心是“在精度损失可接受的范围内最大化提升效率”,只要结合业务场景灵活取舍,你也能让YOLOv11在资源受限的环境中大放异彩。接下来,我们从模块选型到代码集成,一步步带你打造“轻量且能打”的YOLOv11,真正帮你解决工业落地中的效率与精度痛点。训练过程中关注模型的mAP和推理速度,若精度下降过多,可调整模块替换的比例(如仅替换Backbone的部分卷积层)。

m0_64661770的博客 502

Java基础——枚举类的使用教程

Java基础——枚举类的使用教程知识点笔记

青春无问西东 岁月自成芳华 2084

RK3568-适配phy芯片ip101gri

复位时间查阅数据手册。

Paper_Love的博客 2644

java中的枚举

Java中的switch语句是一种控制流语句,用于基于不同的情况执行不同的代码块。在Java 7之前,switch语句只能用于基本数据类型(如int、char等),或者字符串。从Java 7开始,switch语句也可以用于枚举类型,这使得基于枚举的代码更加清晰和易于维护。迭代枚举类型是Java中一种常见的操作,它允许开发者遍历枚举类型中的所有常量。Java为枚举类型提供了内置的迭代机制,使得遍历枚举变得异常简单和高效。单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。

无远弗届 1386

ABAP Reduced Message Types:用精简 IDoc + Change Pointer,把主数据分发做得又快又省

本文介绍了SAP系统集成中主数据分发的精简优化方法。通过创建"精简消息类型"(Reduced Message Types),可以在不改标准IDoc类型的前提下,只发送接收系统真正需要的数据。文章详细解析了主数据变更链路的完整流程,包括变更文档、变更指针和IDoc生成机制,并重点说明了如何在BD53事务中创建精简消息类型、选择保留字段、激活变更指针等实操步骤。此外,还介绍了通过BD59过滤对象和BD64分发模型实现更精确的数据分发,以及变更指针的激活验证、IDoc生成作业和定期清理等运维要

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 134

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java中的枚举_Java中的枚举

java中的枚举Enum was introduced in Java 1.5 as a new type whose fields consists of a fixed set of constants. For example, we can create directions as Java Enum with fixed fields as EAST, WEST, NORTH, and ...

从零开始的教程世界 892

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java中的枚举详解

枚举在Java中是一种特殊的类,用来定义一组固定的常量。它在Java5中引入,提供了一种类型安全的方式来定义和使用常量集合。尽管enum看起来像是新的数据类型,但它实际上是一个受限制的类,继承自。在编译时,编译器生成的类包含了所有定义的常量,并提供了内置的方法,如values()和valueOf(),用来获取所有枚举常量或根据名称返回特定常量。枚举的引入不仅增强了代码的可读性,还提供了更强大的功能和灵活性。Java枚举不仅可以定义常量,还可以实现接口,提供额外的行为和功能。

努力分享一些干货 1531

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java枚举

Java枚举类 一个类中的对象 认为个数是有限且固定的 可以将每一个对象一一列举出来 1.概念 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性。在Java中,被 enum 关键字修饰的类型就是枚举类型。 2.示例(在没有枚举时,自己设计一个类) 1.试一试若没有枚举类型的时候 如何手动设计 (静态常量 单例模式) Day(类 当做描述星期 7个对象) p...

派拉斯兔子的博客 2416

JAVA 中的枚举类

JDK 1.5 新增了一个关键字 enum(它与 class、interface 关键字的地位相同),用来定义枚举类。枚举类是一种特殊的类,它同样可以有自己的成员方法、成员变量、构造器,同时还可用实现一个或者多个接口。对应普通的 Java类,一个源文件中只能够定义一个使用 public 修饰的类,同样的枚举类跟普通的 Java 类一样,一个 Java 一个源文件中也只能够定义一个使用 public 修饰的枚举类,且 Java 源文件名也必须和 public 修饰的枚举类的类名相同。

weixin_54851039的博客 1551

java 枚举 总结,java枚举总结

java枚举小结在百度百科上是这样介绍枚举的:在C#或C++,java等一些计算机编程语言中,枚举类型是一种基本数据类型而不是构造数据类型,而在C语言等计算机编程语言中,它是一种构造数据类型。枚举类型用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。而在java中,枚举扩大了这一概念,因为在java中,枚举已经称为一个类,因此完全具有类的特性.我们都知道枚举是JDK1....

weixin_31750655的博客 323

Java 枚举

这篇文章由 JavaGuide 翻译,公众号: JavaGuide,原文地址:https://www.baeldung.com/a-guide-to-java-enums 。在本文中,我们将看到什么是 Java 枚举,它们解决了哪些问题以及如何在实践中使用 Java 枚举实现一些设计模式。enum关键字在 java5 中引入,表示一种特殊类型的类,其总是继承java.lang.Enum类,更多内容可以自行查看其官方文档。枚举在很多时候会和常量拿来对比,可能因为本身我们大量实际使用枚举的地方就是为了替代常量。

rc1596919047的博客 1210

java 枚举总结

目录 什么是枚举 枚举语法 枚举的创建与使用样例 声明枚举 枚举类 EnumMap 与 EnumSet EnumMap 类 EnumSet 类 枚举的7种用法 用法一:常量 用法二:switch 用法三:向枚举中添加新方法 用法四:覆盖枚举的方法 用法五:实现接口 用法六:使用接口组织枚举 用法七:关于枚举集合的使用 枚举类的底层实现 Enum基础源码 创建过程 枚举底层结构 静态代码块 编译器添加的values方法 编译器添加的valueOf方法 生成的内.

今天吃了吗的博客 1719

java 枚举嵌套枚举_Java中的嵌套枚举?

在OP的一些评论之后,我更新了我的代码.使用语法变得丑陋,在切换块中可能无法正常工作,但我相信这可以实现OP的目标:import java.util.*;public class HelloWorld{public static void main(String []args){// Different services are not equalSystem.out.println(Servic...

weixin_30941215的博客 2454
上一篇: java中的反射
下一篇: 几个java编程的典型例子
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Seven的代码实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值