大家好,我是IT修真院深圳分院第5期学员,一枚正直善良的JAVA程序员。
今天给大家分享一下,修真院官网JAVA任务基础中,Java基础之枚举类?
1.背景介绍
枚举(enum),是指一个经过排序的、被打包成一个单一实体的项列表。
一个枚举的实例可以使用枚举项列表中任意单一项的值。
枚举在各个语言当中都有着广泛的应用,通常用来表示诸如颜色、方式、类别、状态等等数目有限、形式离散、表达又极为明确的量。
枚举类型是Java 5中新增特性的一部分,在Java中它是一种特殊的数据类型,
之所以特殊是因为它既是一种类(class)
类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性。
2.知识剖析
值类型枚举 (enumeration),是值类型的一种特殊形式,
它从 System.Enum 继承,并为基础基元类型的值提供备用名称。枚举类型有名称、基础类型和一组字段。
基础类型必须是一个内置的有符号(或无符号)整数类型(如 Byte、Int32 或 UInt64)。
字段是静态文本字段,其中的每一个字段都表示常数。
所使用的语言给每个字段都分配一个基础类型的特定值。
java中的枚举类可以有构造函数、可以实现接口,但不能继承任何类,其在编译以后默认继承jdk内部的枚举类。
3.常见问题
什么时候需要使用枚举
4.解决方案
当我们对于一些比较固定的常量的时候,使用枚举是很好的方法
在程序中这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。
例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”。
范围限定的作用比较重要,多路分发,应该属于应用,int也能实现的。
比如描述红绿灯,如果用整型来表示,可以用-1表示红灯,1表示绿灯,0表示黄灯。
如果能够严格遵守{-1,0,1}这么个取值范围,那也没问题,但是这是需要程序保障,在运行时,不会出现-2、2这样越界的应
用。如果用枚举,限定为enum{RED,GREEN,YELLOW},这样就不可能出现越界了(至少在编译期就提示错误了)。
对于上述这种情况就比较适合使用枚举了
5.编码实战
这里我们看看示例
enum 的语法结构尽管和 class 的语法不一样,但是经过编译器编译之后产生的是一个class文件。
该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum 。
所以,实际上 enum 就是一个 class,只不过 java 编译器帮我们做了语法的解析和编译而已。
可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,
不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java是单一继承)。
6.扩展思考
在例子中,以逗号隔开的,最后以分号结尾的,这部分叫做,这个枚举的实例。
也可以理解为,class new 出来的实例对象。这下就好理解了。只是,class,new对象,
可以自己随便new,想几个就几个,而这个enum关键字,他就不行,他的实例对象,
只能在这个enum里面体现。也就是说,他对应的实例是有限的。这也就是枚举的好处了,限制了某些东西的范围
7.参考文献
http://blog.csdn.net/qq_27093465/article/details/52180865
百度,其他blog
8.更多讨论
1.枚举类是有序的吗?
使用枚举实例方法ordinal可以看出枚举类是有序的,而且是根据其在列表的位置决定其序号,序号以0为起始点。
2.java中的枚举类和常量类区别在哪儿?
枚举的本质是类,常量的本质只是一个值。枚举里面可以设计方法来返回值,但是常量一旦声明就无法改变。
3.枚举有哪些使用场景。
1、作为普通的常量使用,如星期、季节、颜色、城市等等;通常配合switch语句使用。
2、往枚举中添加变量、构造函数、以达到灵活获取指定值的目的(注: Java 要求必须先定义 enum 实例,否则编译会报错);通常用于一些业务系统中定义一些固定值,如用于匹配db中的字段值等。
3、往枚举中添加自己特定方法,以实现自己所需的相关业务逻辑。
4.java中的枚举还有许多其它的用法,如重写toString()、equals()等方法,实现接口、枚举Map等等,
5.总结:
1、所有枚举类都是继承java.lang.Enum类,可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,不过,因为java是单继承,所以枚举不能再继承其它类,但枚举可以实现接口。
2、不使用枚举也可以用其它方式代替实现类似的效果,而灵活地运用枚举可以带来许多便利,但也切忌为了用枚举而用枚举,这样反而可能带来不利的影响。
视频地址:小课堂视频
PPT:PPT