Java开发中的枚举类型定义了一个枚举值的列表,每一个值是一个标识符。例如,下面的语句声明了一个枚举类型,用来表示星期的可能状况:html
public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
实际上,这个声明定义的类型是一个类,它有7个实例。所以,在比较两个枚举类型的值时,永远不须要调用equals,直接使用“==”就能够了。this
枚举类型的值相似于一个常量,所以,按照惯例拼写都使用大写字母。而枚举类型的命名则与类名的命名规则一致。
一旦定义了枚举类型,就能够使用这个类型来声明变量:htm
Day day;
变量day只能是枚举类型Day中的一个值或null。能够使用下面的语法访问枚举值:对象
EnumName.ValueName
例如,下面的语句将枚举值赋给变量day:blog
day = Day.SUNDAY;
能够在一个枚举类型的对象上使用下面的方法:接口
public String name();ip
返回枚举值的名字。开发
public int ordinal();get
返回枚举值的序号。枚举类型中的第一个值序号为0,第二个值序号为1,依次类推。
下面的例子展现了枚举类型的使用:it
public class EnumDemo { enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY } public static void main(String[] args) { Day day1 = Day.FRIDAY; Day day2 = Day.THURSDAY; System.out.println("The name of day1 is" + day1.name()); System.out.println("The name of day2 is" + day2.name()); System.out.println("The ordinal of day1 is" + day1.ordinal()); System.out.println("The ordinal of day2 is" + day2.ordinal()); } }
这个程序的输出以下:
The name of day1 is FRIDAY The name of day2 is THURSDAY The ordinal of day1 is 5The ordinal of day2 is 4
因为枚举类型是Object类的子类和Comparable接口的实现类,所以能够对枚举对象调用Object类的方法,例如equals,toString等,也能够调用Comparable接口的compareTo方法。
在switch-case语句中使用枚举类型时,case标签能够是省略枚举类型的枚举值,例如:
switch (day) { case SUNDAY: // process SUNDAY case MONDAY: // process MONDAY ... }
能够定义具备数据域、构造器和方法的枚举类型:
public enum Day { SUNDAY("星期天"), MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY("星期三"), THURSDAY("星期四"), FRIDAY("星期五"), SATURDAY("星期六"); public String description; private Day(String description) { this.description = description; } public String getDescription() { return description; } }
须要注意的是,当枚举类型中除了枚举值的声明外还有其余部分时,枚举值的声明必须是第一条语句,且结尾处须要使用分号。此外,因为枚举值的数量是在编译期就肯定的,所以不建议建立新的枚举值,因此Java语法要求枚举类型的构造方法是私有的以免被直接调用。private修饰符可省略,这种状况下,构造方法也会被默认为私有的。