在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。

  例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”。

  enum 的全称为 enumeration, 是 JDK 1.5  中引入的新特性,存放在 java.lang 包中,在上面的这种情况下,enum就能派上用场了。枚举类型的用途不仅如此,具体可用场景可看下面的介绍

1、常量

  以前我们定义一个常量通常都是使用 public static final …… 定义的,如下面:

public static final CONSTANT_STR = "TEST";

  或者使用接口定义的变量,因为接口定义的变量默认都是public static final,如下:

/*** 星期的常量接口*/
public interface IWeekConstants {String MON = "Mon";String TUE = "Tue";String WED = "Wed";String THU = "Thu";String FRI = "Fri";String SAT = "Sat";String SUN = "Sun";
}

  有了枚举我们可以使用下面的方式:

public enum WeekEnum {MON, TUE, WED, THU, FRI, SAT, SUN;
}

  解释:创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式 Class Enum<E extends Enum<E>>,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序

  上面那段代码声明的enum对象实际上调用了7次Enum(String name, int ordinal) 这个构造函数。(name 是常量,上面是MON,TUE等,ordinal是被创建顺序)

new Enum<EnumTest>("MON",0);
new Enum<EnumTest>("TUE",1);
new Enum<EnumTest>("WED",2);
。。。。。。

2、switch

  当我们用switch时,一般都是使用int和char,但其实枚举也可以用在switch中,而且可能使用枚举,可以让我们的代码的可读性更强。下面是枚举使用enum的例子

enum Color{  GREEN, YELLOW, RED
}
public class TrafficLight {  Color color = Color.RED;  public void change() {  switch (color) {  case RED:  System.out.println("红色");  break;  case YELLOW:  System.out.println("黄色");  break;  case GREEN:  System.out.println("绿色");  break;  }  }
}  

3、向枚举中添加新方法 + 遍历

  我们使用常量的时候,我们使用接口的时候是可以有值与之对应的,如上面IWeekConstants 接口的MON的值是Mon,但枚举好像没能标示出这种意义。下面我们就讨论该方式的实现和枚举类型的遍历

  枚举类型提供了构造函数,我们可以通过构造函数和覆写toString方法来实现。实现代码如下:

package com.zcr.test;enum ActionTypeEnum{//通过括号赋值,而且必须带有一个参构造器和一个属性跟方法,否则编译出错//赋值必须都赋值或都不赋值,不能一部分赋值一部分不赋值;如果不赋值则不能写构造器,赋值编译也出错下载(1,"xiazai"),访问(2,"fangwen");int index;String name;private ActionTypeEnum(int index,String name){this.index = index;this.name = name;}public int getIndex(){return index;}public void setIndex(int index){this.index = index;}public String getName(){return name;}public void setName(String name){this.name = name;}}public class EnumTest
{public static void main(String[] args){ActionTypeEnum[] actionTypeEnums = ActionTypeEnum.values();for(ActionTypeEnum actionTypeEnum : actionTypeEnums){System.out.println("name=" + actionTypeEnum.getName());System.out.println("index= " + actionTypeEnum.getIndex());System.out.println("oridary=" + actionTypeEnum.ordinal());System.out.println("this = " + actionTypeEnum);System.out.println("下载值:"  + actionTypeEnum.valueOf("下载"));System.out.println("name()方法= " + actionTypeEnum.name());System.out.println("--------------叫我分割线------------------");}}
}

运行结果:

name=xiazai
index= 1
oridary=0
this = 下载
下载值:下载
name()方法= 下载
--------------叫我分割线------------------
name=fangwen
index= 2
oridary=1
this = 访问
下载值:下载
name()方法= 访问
--------------叫我分割线------------------

4、总结

   可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java是单一继承),但可以继承接口。

  致谢:感谢您的阅读!

java enum(枚举)的使用相关推荐

  1. android enum java包_Android @IntDef注解取代Java enum枚举提高性能详解

    Android @IntDef注解取代Java enum枚举提高性能 为提高Android性能,Android官方建议使用@IntDef注解替代Java的enum枚举.@IntDef的使用给出一个例子 ...

  2. Java Enum 枚举

    Java Enum(枚举)是一个Java类 enum TestEnum{     a("Foo1"),b("Foo2"),c("Foo3") ...

  3. java enum优点_你需要关注的 Java Enum 枚举的几个细节

    枚举是一个非常古老的语言特性,用来实现具名的有限集合,在 C/C++ 中使用广泛.而 Java 在 Java SE5 才引入枚举.也许语言设计者觉得既然是后引入该特性,那么一定要在这个特性上支持比其他 ...

  4. Java enum枚举

    文章目录 1. 枚举例子 2. 接口的实现 3. 枚举中定义抽象方法 enum 定义了枚举类型,其继承于 Enum 枚举类 1. 枚举例子 import java.util.EnumMap; impo ...

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

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

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

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

  7. java enum枚举的使用详情(实例与原理分析)

    一.原始的接口定义常量 public interface IConstants {String MON = "Mon";String TUE = "Tue";S ...

  8. java enum(枚举)使用详解 + 总结

    转:http://www.cnblogs.com/hyl8218/p/5088287.html#undefined enum 的全称为 enumeration, 是 JDK 1.5  中引入的新特性, ...

  9. Java enum(枚举)的用法详解(转)

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

最新文章

  1. 皮一皮:一直情绪不稳的原因终于找到了!
  2. Seetaface 向树莓派 移植
  3. OSCACHE(转)
  4. EfficientDet 目标检测开源实现
  5. tree命令生成目录结构
  6. 在linux缓存里写数据,缓存策略
  7. Coolite的Combobox智能检索应用指南
  8. Linux:CentOS 7 解压 7zip 压缩的文件
  9. JavaWeb新闻发布系统案例4
  10. Excel数据分析学习笔记(三)Excel常用数据分析工具(需要统计学基础)
  11. 使用 WebSocket 实现一个网页版的聊天室(摸鱼更隐蔽)
  12. 计算机远程桌面连接有几种方式,远程桌面连接的2种方法
  13. 内外网隔离--网络准入控制系统有什么功能
  14. radeon r600 hpd中断处理
  15. CSS的一些基础应用
  16. SLAM14讲学习笔记(十五)卡尔曼滤波器的直观理解
  17. 电销行业通讯难题的解决方案出来了!
  18. 今日键盘字母键突然“失灵”了,这是为什么呢?
  19. 华为、苹果,为何“盯”上二手机?
  20. Android open failed: ENOENT (No such file or directory)以及open failed: EISDIR (Is a directory)

热门文章

  1. Infortrend的EonStor DS与GS强势进军银行领域
  2. Linux 安装Resin4.0.40
  3. 浅谈Jquery中的bind()、live()、delegate()、on()绑定事件方式
  4. HDU 4001 To Miss Our Children Time(2011年大连网络赛 A 贪心+dp)
  5. Ubuntu系统环境变量配置文件(转)
  6. ASP.NET AJAX web chat application
  7. Ubuntu12.04安装jdk1.6.0
  8. 一起谈.NET技术,WCF的问题和Using语句块
  9. Citrix XenApp Hotfix Rollup Pack部署最佳实践
  10. 舆情分析项目-重庆公交坠江原因