概述
在某些情况下,一个类的对象是有限且固定的,例如四季类,它是一个只有春夏秋冬这种实例有限且固定的类。我们将这种类称为枚举类。枚举类是一种特殊类型的类,其地位和class,interface相同。
public enum Season {
SPRING, SUMMER, AUTUMN, WINTER
}
Java中使用enum关键字来定义枚举类,自定义的枚举类 继承自java.lang.Enum,且实现了Seriablizable 和 Comparable 两个接口,并且他不能继承其他类,也不能被继承。不过他可以实现一个或多个接口。
所有的枚举类的属性都是 public static final(无需程序员手动添加), 在实际应用中,我们大量使用枚举的原因是为了替代常量,相比于静态常量,枚举有如下的优点:
(1)枚举有内置方法
举例说明:当希望列出所有的季节常量,枚举类自带的values方法可以实现。
for(Season s : Season.values()){
System.out.println(s);
}
(2)代码更具可读性
(3)允许进行编译时检查,它会记录可接受值的列表,避免由于传入无效值引起的意外。
定义枚举类
public enum WeekEnum {
// 枚举类里的每个枚举实例都有属性today
private String today;
// 枚举实例
SUNDAY("星期日"), MONDAY("星期一"), TUESDAY("星期二"),
WEDNESDAY("星期三"), THURSDAY("星期四"), FRIDAY("星期五"),
SATURDAY("星期六");
// 枚举类的构造器只能使用 private 修饰
private WeekEnum(String today) {
this.today = today;
}
public String getToday() {
return today;
}
public void setToday(String today) {
this.today = today;
}
@Override
public String toString(){
return today;
}
}
常用方法
以上面定义的星期枚举类为例,介绍一些方法:
(1)int compareTo(E o)
该方法用于比较顺序,且进行比较的双方必须是相同类型。若调用方法的枚举对象位于指定枚举对象之后,则返回正整数;反之返回负整数;否则返回零。
System.out.println(WeekEnum.FRIDAY.compareTo(WeekEnum.MONDAY));//4
System.out.println(WeekEnum.SUNDAY.compareTo(WeekEnum.MONDAY));//-1
System.out.println(WeekEnum.FRIDAY.compareTo(WeekEnum.SATURDAY));//-1
(2)String name()
返回枚举实例的名称,即枚举值。
System.out.println(WeekEnum.FRIDAY.name());//输出FRIDAY
(3)static values() 返回一个包含全部枚举值的数组
for(WeekEnum week : WeekEnum.values()) {
System.out.println(week);
}
(4)String toString()
返回枚举值的名称,与 name 方法类似。