2015-10-24 java达人

Java 中 的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型。要了解枚举类型,建议大家先打开jdk 中的Enum类简单读一下,这个类里面定义了很多protected 方法,比如构造函数,如果要使用这些方法我们可以把枚举类型定义到当前类中。每个枚举类型,都有自己的名字和顺序,当我们输出一个枚举类型的时候,会输入 枚举类型的name ,具体可以参考下面的例子。

一、 通常定义常量方法

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;

}

二、 枚举类型定义常量方法

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 );

}

}

三、 完整示例代码

枚举类型的完整演示代码如下:

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 main(String[] 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<Light, String> currEnumMap = new EnumMap<Light, String>(

Light. class );

currEnumMap.put(Light. RED , " 红灯 " );

currEnumMap.put(Light. GREEN , " 绿灯 " );

currEnumMap.put(Light. YELLOW , " 黄灯 " );

// 2. 遍历对象

for (Light aLight : Light.values ()) {

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

+ currEnumMap.get(aLight) + "]" );

}

}

/**

* 演示 EnumSet 如何使用, EnumSet 是一个抽象类,获取一个类型的枚举类型内容<BR/>

* 可以使用 allOf 方法

*/

private static void testEnumSet() {

EnumSet<Light> 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

四、 通常定义常量方法和枚举定义常量方法区别

1. 代码:

public static final int ON = 1;

}

有什么不好了,大家都这样用了很长时间了,没什么问题啊。

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

可以创建一个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 多路分发

java枚举类型enum的使用的更多相关文章

  1. 【转】java枚举类型enum的使用

    原文网址:http://blog.csdn.net/wgw335363240/article/details/6359614 java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到 ...

  2. 转载 java枚举类型enum的使用 (原文地址:http://blog.csdn.net/wgw335363240/article/details/6359614)

    java枚举类型enum的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java中定义的常量值不采用enmu枚举类型,而采用public final static 类型来定义呢?以前我们都是采 ...

  3. 深入理解Java枚举类型(enum)

    https://blog.csdn.net/javazejian/article/details/71333103 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(en ...

  4. 【转】掌握java枚举类型(enum type)

    原文网址:http://iaiai.iteye.com/blog/1843553 1   背景 在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量.之前我们通常利用 ...

  5. java 枚举类型 enum

    在java SE5中添加了枚举类型,即enum关键字.在这之前,当你需要创建一个整形常量集时,但是这些枚举值并不会必然的将其自身的取值限制在这个常量集的范围之内,因此这样做的显得不安全,也不方便使用. ...

  6. java 枚举类型enum

    简单介绍 Java 中的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型.要了解枚举类型,建议大家先打开jdk 中的Enum 类简单读一下,这个类 ...

  7. Java枚举类型 enum

    定义 An enum type is a special data type that enables for a variable to be a set of predefined constan ...

  8. Java枚举类型enum使用详解

      java的Enum枚举类型终于在j2se1.5出现了.之前觉得它只不过是鸡肋而已,可有可无.毕竟这么多年来,没有它,大家不都过得很好吗?今日看<Thinking in Java>4th ...

  9. 全面解读Java中的枚举类型enum的使用

    这篇文章主要介绍了Java中的枚举类型enum的使用,开始之前先讲解了枚举的用处,然后还举了枚举在操作数据库时的实例,需要的朋友可以参考下 关于枚举 大多数地方写的枚举都是给一个枚举然后例子就开始sw ...

随机推荐

  1. java.lang.NoSuchFieldError: RAW_XML_FILE_HEADER,调用XWPFTemplate动态合并生成一个新的docx文档时报错

    在使用 org.apache.poi 对office文件  根据表单内容和已上次的附件 动态合并成一个新的文档时,本地调试完全ok 但是发布倒Linux环境上就老是报这个错误java.lang.NoS ...

  2. DEM渲染洼地淹没图(转)

    http://blog.csdn.net/kikitamoon/article/details/18700555 首先要准备基础数据,一张DEM栅格图. 然后将掩膜水位以下的数据提取出来以备后用.这里 ...

  3. HTML5中表单元素的formaction属性

    在submit按钮中,根据不同的submit按钮,将表单提交到不同的页面中: <form id="test" action="test.jsp"> ...

  4. Discuz论坛架构改造

    这个论坛一直通过NFS服务共享文件给三台web服务器做负载均衡. 在实际环境中WEB Server总是出现CPU负载突然升高.文件交互的网络流量异常.甚至WEB Server夯死,NFS不能卸载,只能 ...

  5. A.prototype.b=22和A.b=22的区别

    // A.prototype.b=22和A.b=22有什么区别 <script> function A(){    this.b=11; }A.b=22;//A.prototype.b=2 ...

  6. bvp4c--语法

    bvp4c--语法   1. bvp4c: sol = bvp4c(odefun,bcfun,solinit) sol = bvp4c(odefun,bcfun,solinit,options) so ...

  7. Genymontion安装

    Genymontion是什么 它提供的是Android的虚拟环境,和sdk的模拟器类似,能够支持windows,liunx,mac等操作系统,他比我们SDK的模拟器快很多,所以也是为什么很多开发人员会 ...

  8. 模仿微博 用OC语言编写

    演示如下 源代码下载:模仿微博.zip

  9. 解决从linux本地文件系统上传文件到HDFS时的权限问题

    当使用 hadoop fs -put localfile /user/xxx 时提示: put: Permission denied: user=root, access=WRITE, inode=& ...

  10. 两天来学习C的感受

    大学的时候曾经学习过C语言,教科书是谭浩强的绿色的书.当时根本没有好好学习,期末考试是靠老师画重点才过的. 那个时候稀里哗啦的完全听不明白,最揪心的是指针和文件操作(当时根本不知道这个世界上还有DB存 ...