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 string转enum_java枚举类Enum方法简介(valueof,value,ordinal) (转)相关推荐

  1. java switch enum对象_Java枚举类(enum)5种常见用法和3种内部方法,详细附代码

    文章目录 Java枚举类(enum)重点用法和内部方法,附代码 一.Java 枚举类(enum) 详解5种常见的用法 1.常量 2.支持switch 3.向枚举中添加新方法 4.覆盖枚举的方法 5.实 ...

  2. java arraylist枚举器遍历_Java基础(七)泛型数组列表ArrayList与枚举类Enum

    一.泛型数组列表ArrayList 1.在Java中,ArrayList类可以解决运行时动态更改数组的问题.ArrayList使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而 ...

  3. java枚举类Enum入门理解

    目录 枚举的定义 JDK5.0之前只能自定义枚举类 自定义枚举类的理解: JDK5.0之后enum关键字定义枚举类 区别于自定义枚举类 enum的父类Enum的常用方法 toString方法和valu ...

  4. 【Java 枚举 集合】枚举类Enum、映射EnumMap、集EnumSet

    枚举Enum.映射EnumMap.集EnumSet 一.枚举Enum 1.概述 2.介绍 ① valueOf ② values 3.分析 ※ 模仿一个枚举类 二.枚举映射 EnumMap 1.概述 2 ...

  5. java枚举类型数组_Java基础(七)泛型数组列表ArrayList与枚举类Enum

    一.泛型数组列表ArrayList 1.在Java中,ArrayList类可以解决运行时动态更改数组的问题.ArrayList使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而 ...

  6. java switch枚举类,使用枚举类enum代替switch

    使用枚举类enum代替switch 使用枚举类,能大大减少switch的代码量,提高代码阅读性 public enum TestEnum { stu1("小明", "一班 ...

  7. 【Java】6.9 枚举类

    目录 枚举类简介 实现枚举类 枚举类的成员变量.方法和构造器 枚举类简介 [什么是枚举类?] 枚举类就是实例有限且固定的类.且在定义时,枚举类要在第一行全部列出 [为什么要是用枚举类?] 使用枚举类可 ...

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

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

  9. Kotlin 枚举类 enum

    枚举类就是一组命名的常数,是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内. 枚举类的最基本的用法是实现类型安全的枚举: enum class Direction {NORTH, SOUT ...

最新文章

  1. 消息中间件的意义和应用场景 (activeMq)
  2. python爬虫招聘-Python爬虫抓取智联招聘(基础版)
  3. Html百分比设宽偏差大,absolute和relative元素 设置百分比宽高的差异
  4. (58) 在计算字段提供搜索功能
  5. Gentoo - ssh-agent配置
  6. 滤波器开发之四:基于算术平均的中值滤波器
  7. CentOS7上安装WordPress
  8. 【Kafka】Kafka connection to node 0 failed authentication due to SSL handshake failed
  9. access统计班级人数_7省新高考选科统计出炉!学科难度系数排行再度爆冷
  10. android怎么让图片显示在button上面_opencv怎么样可以实时显示图片HSV值
  11. 图像变换——图像反转
  12. UVA10394 Twin Primes【孪生素数】
  13. 同时买票是怎么实现的_搞笑GIF段子:这位挖掘机司机真的很牛,同时胆子很大...
  14. 《Effective C++》 读书笔记之三 资源管理
  15. (转)汉字转拼音码缩写
  16. dlib实现人脸关键点检测检测方法
  17. 华为网络设备——利用三层交换机实现VLAN间路由配置实例
  18. UPnP 端口映射服务威胁分析
  19. 在VM虚拟机上装“黑苹果
  20. 【整理】详解嵌入式片上资源之SDRAM内存

热门文章

  1. 数据挖掘学习笔记之人工神经网络(二)
  2. 数据分析利器--Pandas
  3. vue ui 报错errno:-4058解决办法
  4. Cmd Markdown 公式指导手册
  5. nginx假死导致的问题回顾
  6. Example of ConcurrentHashMap in Java--转
  7. LMAX Disruptor – High Performance, Low Latency and Simple Too 转载
  8. NGINX Config
  9. 用Kubernetes部署超级账本Fabric的区块链即服务(1)
  10. dplyr和data.table让你的数据分析事半功倍