Java 5 之后提供了枚举类,Java枚举类型本质上继承java.lang.Enum类,是引用数据类型,因此也称为“枚举类”。

枚举简介

在C和Objective-C等其他语言中,枚举用来管理一组相关常量的集合,使用枚举可以提高程序的可读性,使代码更清晰且更易于维护。
Java 5 之后可以使用枚举类型,Java中枚举类型的作用已经不仅仅是定义一组常量提高程序的可读性,还具有如下特征:
(1)Java枚举类型是一种类,是引用类型,具有了面向对象特征,可以添加方法和成员变量等。
(2)Java枚举类型父类是java.lang.Enum,不需要显式声明。
(3)Java枚举类型可以实现接口,与类实现接口类似。
(4)Java枚举类型不能被继承,不存在子类。

枚举类声明

Java中使用enum关键字声明枚举类,具体定义放在一对大括号里。语法如下:

[public] enum 枚举名 {
 枚举常量列表
 }

enum前面的修饰符[public]可以省略。public是公有访问级别,可以在任何地方访问。省略后是默认访问级别,只能在当前包中访问。

“枚举名”是该枚举类的名称。它首先应该是有效的标识符,其次应该遵守Java命名规则。如果采用英文单词命名,首字母应该大写,且应尽量用一个英文单词。

“枚举常量列表”是枚举的核心,它由一组相关常量组成。

最简单形式的枚举类

如果采用枚举类来表示工作日,最简单枚举类WeekDays具体代码如下:

java 枚举进程 java的枚举类_java 枚举进程


在枚举类WeekDays中定义了5个常量,使用枚举类WeekDays代码如下:

java 枚举进程 java的枚举类_枚举类_02


输出结果:

java 枚举进程 java的枚举类_Java_03


上述代码声明工作日变量day,day是WeekDays枚举类型,取值是WeekDays.FRIDAY,是枚举类中定义的枚举常量。day = WeekDays.FRIDAY赋值过程中实例化WeekDays枚举类对象,并初始化为WeekDays.FRIDAY。注意赋值表达式是“枚举类型名.枚举常量”的形式。

枚举类中成员变量和成员方法

枚举类可以像类一样包含成员变量和成员方法,成员变量可以是实例变量也可以是静态变量,成员方法可以是实例方法也可以是静态方法,但不能是抽象方法。

注意:添加其他成员的枚举类需要注意,“枚举常量列表”语句必须是枚举类中的第一行代码。而且“枚举常量列表”语句后面要加分号表示语句的结束。

枚举类构造方法

在类中成员变量的初始化是通过构造方法实现的,而在枚举类中也是通过构造方法初始化成员变量的。例如:

java 枚举进程 java的枚举类_Java_04


注意:枚举类中的构造方法只能是私有访问级别,构造方法可以省略private关键字,但它任然是私有的构造方法。这就说明枚举类不允许在外部创建对象。

一旦添加了有参的构造方法,那么“枚举常量列表”也需要修改,每一个枚举常量都是一个实例,都会调用构造方法进行初始化成员变量。

枚举类常用方法

所有枚举类都继承java.lang.Enum类,Enum中定义了一些枚举中常用的方法:

  • int ordinal():返回枚举常量的顺序。这个顺序根据枚举常量声明的顺序而定,顺序从零开始。
  • 枚举类型[] values():静态方法,返回一个包含全部枚举常量的数组。
  • 枚举类型 valueOf(String str):静态方法,str是枚举常量对应的字符串,返回一个包含枚举类型的实例。



    提示:在Java类引用类型进行比较时,有两种比较方法,即 == 和 equals。第一种比较的是两个引用是否指向同一个对象,equals是比较对象内容是否相同。但是,枚举引用类型中这两种都是一样的,都是比较两个引用是否指向同一个实例,枚举类中每一个枚举常量无论何时都只有一个实例。