一、需要了解的知识点
- 枚举:在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数(来源:百度百科),说人话就是:枚举用来表示事物固定的有限种类型,是固定的多个常量对象的集合。
二、枚举的本质
- 下面我们使用一个例子对枚举的本质进行解释说明
- 测试源代码如下:
enum Season{ SPRING,SUMMER,AUTUMN,WINTER }
- 使用反编译工具反编译生成的字节码:
- 分析:
(1) 通过将生成的字节码文件反编译后,我们可以看到枚举其实就是一个特殊的类,这个类继承于Enum类,且类是使用final修饰的,意味着他不能被其他类继承。
(2) 我们定义的枚举类型的值是当前枚举类的实例,构造器是私有的只能本类使用,且用final,static修饰表示为静态的常量对象并在静态代码块中为其赋予了初值,并且每一个常量对象在创建时都带有一个int类型的序号。
(3)还有两个枚举的静态操作方法,功能如上图所示。
三、枚举的用途
- 最常用的用来表示事物有限的类型。
- 因为枚举类继承自Enum类,所以所有枚举对象可以调用Enum类中的方法。
- switch -case语句支持枚举类型,是因为switch-case当中使用的是枚举常量对象对应的ordinal方法所返回的int类型的值。
- 枚举可以构造单例模式,使用枚举构造单例模式非常安全,即使使用反射也不能创建对象。
- 从第四点可以看出枚举并不一定局限于固定的形式(用来表示固定的类型),它也可以用来在其中编写方法,实现业务功能。