分享人:深圳分院 常雷雷
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
枚举(enum),是指一个经过排序的、被打包成一个单一实体的项列表。
一个枚举的实例可以使用枚举项列表中任意单一项的值。
枚举在各个语言当中都有着广泛的应用,通常用来表示诸如颜色、方式、类别、状态等等数目有限、形式离散、表达又极为明确的量。
枚举类型是Java 5中新增特性的一部分,在Java中它是一种特殊的数据类型,
之所以特殊是因为它既是一种类(class)
类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性。
值类型枚举 (enumeration),是值类型的一种特殊形式,
它从 System.Enum 继承,并为基础基元类型的值提供备用名称。枚举类型有名称、基础类型和一组字段。
基础类型必须是一个内置的有符号(或无符号)整数类型(如 Byte、Int32 或 UInt64)。
字段是静态文本字段,其中的每一个字段都表示常数。
所使用的语言给每个字段都分配一个基础类型的特定值。
java中的枚举类可以有构造函数、可以实现接口,但不能继承任何类,其在编译以后默认继承jdk内部的枚举类。
什么时候需要使用枚举
当我们对于一些比较固定的常量的时候,使用枚举是很好的方法
在程序中这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。
例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”。
范围限定的作用比较重要,多路分发,应该属于应用,int也能实现的。
比如描述红绿灯,如果用整型来表示,可以用-1表示红灯,1表示绿灯,0表示黄灯。
如果能够严格遵守{-1,0,1}这么个取值范围,那也没问题,但是这是需要程序保障,在运行时,不会出现-2、2这样越界的应
用。如果用枚举,限定为enum{RED,GREEN,YELLOW},这样就不可能出现越界了(至少在编译期就提示错误了)。
对于上述这种情况就比较适合使用枚举了
这里我们看看示例
enum 的语法结构尽管和 class 的语法不一样,但是经过编译器编译之后产生的是一个class文件。
该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum 。
所以,实际上 enum 就是一个 class,只不过 java 编译器帮我们做了语法的解析和编译而已。
可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,
不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java是单一继承)。
在例子中,以逗号隔开的,最后以分号结尾的,这部分叫做,这个枚举的实例。
也可以理解为,class new 出来的实例对象。这下就好理解了。只是,class,new对象,
可以自己随便new,想几个就几个,而这个enum关键字,他就不行,他的实例对象,
只能在这个enum里面体现。也就是说,他对应的实例是有限的。这也就是枚举的好处了,限制了某些东西的范围
http://blog.csdn.net/qq_27093465/article/details/52180865
百度,其他blog
感谢观看,如有出错,恳请指正
BY : 深圳分院 常雷雷