首先说说为什么要写这个enum枚举类吧,是群里有个新手问:怎样把enum类中的值遍历得到,其实自己用的也很少。自己也是确实不知道,于是我去网上搜了不少,总结了些,希望对大家有帮助:首先我说说怎样遍历枚举中的值吧,其实很简单,这里贴张图吧

老规矩,下面是我在网上扒的一些个人感觉写的好的文章,在这里引用纯属学习,望前辈们莫责怪

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中的enum枚举类相关推荐

  1. JAVA中Switch中使用Enum枚举类

    问题 项目中出现了需要结合使用Switch和Enum的情况,按照平常思路编写代码后发现无法通过编译,如下列代码所示(只保留关键部分) 枚举类Constant代码如下 public enum Const ...

  2. Java中的Enum(枚举)用法介绍

    1. 关于Java Enum: 学过C/C++等语言的人,应该都对Enum类型略知一二.Enum一般用来表示一组相同类型的常量.如性别.日期.月份.颜色等.对这些属性用常量的好处是显而易见的,不仅可以 ...

  3. Java中的enum详细解析------Java enum 枚举还可以这么用

    在大部分编程语言中,枚举类型都会是一种常用而又必不可少的数据类型,Java中当然也不会例外.然而,Java中的Enum枚举类型却有着许多你意想不到的用法,下面让我们一起来看看. 1.可以在enum中添 ...

  4. Java学习总结3——枚举类和反射机制

    Java枚举类和反射机制 一.Java枚举类(Enum): 在某些情况下,一个类的对象是有限且固定的,对于这种对象的实例有限且固定的类,在 Java 中被称为枚举类(Enum):枚举类是为了提高代码可 ...

  5. java enum枚举类的用法以及高级玩法

    enum(枚举)类介绍 java枚举类是一组预定义常量的集合,使用enum关键字声明这个类,常量名称官方建议大写 1.enum类基本用法 举一个常见的例子,例如星期就可以描述为一个枚举类,如下 pub ...

  6. JAVA中常量使用常量类或者常量接口还是使用枚举,错误代码和中文可变信息的枚举实现

    文章目录 关于"JAVA中常量使用常量类或者常量接口还是使用枚举",已有定论-使用枚举,原因就不再展开了. 借助java枚举,可以在定义错误名称和代码的同时,定义中文描述信息,但是 ...

  7. JAVA进阶教学之(Enum枚举类)

    首先,我们为什么要学习Enum枚举类 我们引入一段代码: package com.lbj.javase.enumTest;public class EnumTest01 {public static ...

  8. Enum枚举类|注解Annotation

    Enum枚举类 ①枚举类和普通类的差别: 使用 enum 定义的枚举类默认继承了 java.lang.Enum 类 枚举类的构造器仅仅能使用 private 訪问控制符 枚举类的全部实例必须在枚举类中 ...

  9. java map类说_在Java中,关于HashMap类的描述,以下说法错误的是(   )。

    [单选题]所谓覆盖,也称为重写,是指子类中定义了一个与父类某一方法具有相同型构的方法,这里所说的相同型构所指的不是(). [填空题(主观)]半导体二极管实质上是由 [填空(1)] 构成,其主要特性是 ...

最新文章

  1. # 从零開始搭建Hadoop2.7.1的分布式集群
  2. mysql json 函数_MYSQL 开发设计表是硬邦邦的VARHCAR 还是JSON TYPE 来处理数据更香
  3. kpc v0.8.3发布,跨框架的组件库解决方案
  4. OpenCV Canny边缘检测的实例(附完整代码)
  5. AndroidTv Home界面实现原理(二)——Leanback 库的主页卡位缩放动画源码解析
  6. SiteMesh参考
  7. 网络资产管理系统_固定资产管理系统的三种网络架构方式
  8. Linux 12.10 ISO下载地址
  9. 关于spring MVC机制,示例解读
  10. Nikto漏洞扫描工具简介
  11. HTML实现圆形头像效果
  12. 航空公司客户价值分析R语言实现
  13. 08. Web大前端时代之:HTML5+CSS3入门系列 ~ QQ空间时间轴
  14. 并(zhao)查(die)集详解以及其优化版本
  15. 腾达路由器登录远端服务器无响应,腾达路由器 192.168.0.1(tendawifi.com)打不开,怎么办?...
  16. Photoshop CC 2017 For Mac 安装与破解
  17. 坚持整洁亦或拥抱混乱——新书《混乱: 改变我们生活的无序力量》解读
  18. 如何成为一个更好的程序员,或者说是学习者?给你七个建议!
  19. 码农饭碗不保——ChatGPT正在取代Coder
  20. TOEFL wordlist 31

热门文章

  1. dubbo k8s 服务发现_服务化改造实践(二)| Dubbo + Kubernetes
  2. php set error handler,php的set_error_handler正确用法
  3. 期末复习、化学反应工程科目(第八、九章)
  4. 为什么有时打不开爬取到的图片
  5. ACL 2021 | 结构化知识蒸馏方法
  6. 深度学习下的点击率预测:交互与建模
  7. 公开课 | 如何轻松上手华为最新开源框架MindSpore?
  8. CVPR 2021 论文和开源项目合集(Papers with Code)
  9. Spring MVC 常用Jar包官方下载地址(官方Maven仓库)
  10. python算法攻略_算法基础及python实现笔记一(堆和DFS)