好好学习,天天向上,自学网欢迎您!
当前位置:首页 >  考试 >  计算机类 > 内容页

详解Java枚举范例enum及其使用

2021-09-02 05:03:41计算机类访问手机版192

  详解Java枚举范例enum及其使用

  Java 中的枚举范例采纳关头字enum 来界说,从jdk1.5才有的新范例,所有的枚举范例都是承继自Enum 范例。以下是小编搜索收拾整顿的关于Java枚举范例enum详解及其使用,,必要的伴侣可以参考本文!想懂得更多相关信息请继续存眷我们应届结业生测验网!

  要懂得枚举范例,倡议大师先翻开jdk 中的Enum 类复杂读一下,这个类里面界说了很多protected 办法,比方机关函数,假如要使用这些办法我们可以把枚举范例界说到以后类中。每一个枚举范例,都有本人的名字和挨次,当我们输出一个枚举范例的时候,会输入枚举范例的name ,具体可以参考下面的例子。

  1、凡是界说常量办法

  我们凡是操纵public final static 办法界说的代码如下,辨别用1 透露表现红灯,3 透露表现绿灯,2 透露表现黄灯。

  package com.csdn.myEnum;

  public class Light

  /* 红灯 */

  public final static int RED =1;

  /* 绿灯 */

  public final static int GREEN =3;

  /* 黄灯 */

  public final static int YELLOW =2;

  2、枚举范例界说常量办法

  枚举范例的复杂界说办法如下,我们仿佛没方法界说每一个枚举范例的'值。比方我们界说红灯、绿灯和黄灯的代码大概如下:

  public enum Light

  RED , GREEN , YELLOW ;

  我们只可以或许透露表现出红灯、绿灯和黄灯,但是具体的值我们没方法透露表现出来。别急,既然枚举范例供给了机关函数,我们可以经由过程机关函数和覆写toString 办法来实现。首先给Light 枚举范例增加机关办法,然后每一个枚举范例的值经由过程机关函数传入对应的参数,同时覆写toString 办法,在该办法中返回从机关函数中传入的参数,改革后的代码如下:

  public enum Light

  // 操纵机关函数传参

  RED 1, GREEN 3, YELLOW 2;

  // 界说公有变量

  private int nCode ;

  // 机关函数,枚举范例只能为公有

  private Light int _nCode

  this . nCode = _nCode;

  @Override

  public String toString

  return String.valueOf this . nCode ;

  3、完整示例代码

  枚举范例的完整演示代码如下:

  package com.csdn.myEnum;

  import java.util.EnumMap;

  import java.util.EnumSet;

  public class LightTest

  // 1. 界说枚举范例

  public enum Light

  // 操纵机关函数传参

  RED 1, GREEN 3, YELLOW 2;

  // 界说公有变量

  private int nCode ;

  // 机关函数,枚举范例只能为公有

  private Light int _nCode

  this . nCode = _nCode;

  @Override

  public String toString

  return String.valueOf this . nCode ;

  /**

  * @param args

  */

  public static void mainString[] args

  // 1. 遍历枚举范例

  System. out .println " 演示枚举范例的遍历 ......" ;

  testTraversalEnum ;

  // 2. 演示 EnumMap 工具的使用

  System. out .println " 演示 EnmuMap 工具的使用和遍历 ....." ;

  testEnumMap ;

  // 3. 演示 EnmuSet 的使用

  System. out .println " 演示 EnmuSet 工具的使用和遍历 ....." ;

  testEnumSet ;

  /**

  * 演示枚举范例的遍历

  */

  private static void testTraversalEnum

  Light[] allLight = Light.values ;

  for Light aLight : allLight

  System. out .println " 以后灯 name : " + aLight.name;

  System. out .println " 以后灯 ordinal : " + aLight.ordinal;

  System. out .println " 以后灯: " + aLight;

  /**

  * 演示 EnumMap 的使用, EnumMap 跟 HashMap 的使用差不多,只不外 key 要是枚举范例

  */

  private static void testEnumMap

  // 1. 演示界说 EnumMap 工具, EnumMap 工具的机关函数必要参数传入 , 默认是key 的类的范例

  EnumMap currEnumMap = new EnumMap

  Light. class ;

  currEnumMap.putLight. RED , " 红灯 " ;

  currEnumMap.putLight. GREEN , " 绿灯 " ;

  currEnumMap.putLight. YELLOW , " 黄灯 " ;

  // 2. 遍历工具

  for Light aLight : Light.values

  System. out .println "[key=" + aLight.name + ",value="

  + currEnumMap.getaLight + "]" ;

  /**

  * 演示 EnumSet 如何使用, EnumSet 是一个抽象类,获得一个范例的枚举范例内容
  

  * 可使用 allOf 办法

  */

  private static void testEnumSet

  EnumSet currEnumSet = EnumSet.allOf Light. class ;

  for Light aLightSetElement : currEnumSet

  System. out .println " 以后 EnumSet 中数据为: " + aLightSetElement;

  执行成果如下:

  演示枚举范例的遍历 ......

  以后灯 name : RED

  以后灯 ordinal : 0

  以后灯: 1

  以后灯 name : GREEN

  以后灯 ordinal : 1

  以后灯: 3

  以后灯 name : YELLOW

  以后灯 ordinal : 2

  以后灯: 2

  演示 EnmuMap 工具的使用和遍历 .....

  [key=RED,value= 红灯 ]

  [key=GREEN,value= 绿灯 ]

  [key=YELLOW,value= 黄灯 ]

  演示 EnmuSet 工具的使用和遍历 .....

  以后 EnumSet 中数据为: 1

  以后 EnumSet 中数据为: 3

  以后 EnumSet 中数据为: 2

  4、凡是界说常量办法和枚举界说常量办法差别

  以下内容大概有些无聊,但绝对值得一窥

  1. 代码:

  public class State

  public static final int ON = 1;

  public static final Int OFF= 0;

  有什么不好了,大师都这样用了很长期了,没什么成绩啊。

  首先,它不是范例平安的。你必需确保是int

  其次,你还要确保它的范畴是0 和1

  最后,很多时候你打印出来的时候,你只看到 1 和0 ,

  但其没有看到代码的人其实不知道你的打算,摈弃你所有旧的public static final 常量吧

  2. 可以创立一个enum 类,把它看做一个普通的类。除了它不克不及承继其他类了。java 是单承继,它曾经承继了Enum,

  可以添加其他办法,覆盖它自身的办法

  3. switch 参数可使用enum 了

  4. values 办法是编译器拔出到enum 界说中的static 办法,所以,当你将enum 实例向上转型为父类Enum是,values 就不成拜访了。办理方法:在Class 中有一个getEnumConstants 办法,所以即使Enum 接口中没有values 办法,我们仍然可以经由过程Class 工具获得所有的enum 实例

  5. 无法从enum 承继子类,假如必要扩展enum 中的元素,在一个接口的内部,创立实现该接口的枚举,以此将元素进行分组。到达将枚举元素进行分组。

  6. 使用EnumSet 替代标记。enum 要求其成员都是独一的,但是enum 中不克不及删除添加元素。

  7. EnumMap 的key 是enum ,value 是任何其他Object 工具。

  8. enum 答应顺序员为eunm 实例编写办法。所以可觉得每一个enum 实例付与各自差别的行动。

  9. 使用enum 的职责链Chain of Responsibility . 这个干系到计划模式的职责链模式。以多种差别的办法来办理一个成绩。然后将他们链接在一块儿。当一个哀求到来时,遍历这个链,直到链中的某个办理计划可以或许处置该哀求。

  10. 使用enum 的状态机

  11. 使用enum 多路分发

TAG标签: 枚举 详解 类型 enum Java