1、概述
枚举(enum)是一种特殊的类,是 JDK 1.5 中引入的新特性,用于表示一组固定的常量。枚举使得代码更加清晰、类型安全且易于维护。
1.1 未使用枚举时定义一组常量的缺点
1.2 使用枚举的优点
可以将常量组织起来,统一进行管理。使得代码更加清晰、类型安全且易于维护。
1.3 枚举类型的本质
一种受限制的类,不能继承,并且具有自己的方法。创建enum时,编译器会为你生成一个相关的类,这个类继承自 java.lang.Enum。
1.4 枚举类的特点
- 1)、枚举类不能实例化,构造方法访问权限是私有的,否则不会通过编译。
- 2)、枚举类不能继承其他类或枚举,也不能被继承,但是可以实现接口。
- 3)、枚举类不能作为数据类型(如方法参数)。
- 4)、枚举类可以声明抽象方法,每一个枚举常量都要实现该抽象方法。
2、枚举类的基本定义
使用 enum 关键字定义一个枚举类,类中可以包含字段、方法以及构造函数。
2.1 语法格式:访问修饰符 enum 枚举类型名称 {枚举值1, 枚举值2, ···; 枚举类中的方法}
- 1)、基础枚举类:
public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; }
- 2)、 包含字段、方法和构造函数的枚举类:
public enum WeekDay { MONDAY("Monday", "星期一"), TUESDAY("Tuesday", "星期二"), WEDNESDAY("Wednesday", "星期三"), THURSDAY("Thursday", "星期四"), FRIDAY("Friday", "星期五"), SATURDAY("Saturday", "星期六"), SUNDAY("Sunday", "星期日"); private String code; private String value; WeekDay(String code, String value) { this.code = code; this.value = value; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
2.2 枚举类的构造函数
枚举的构造方法访问权限是私有的,否则不会通过编译,防止外部创建枚举实例。每个枚举常量在声明时,实际上是调用了这个私有构造函数。
2.3 枚举类的使用
与使用普通类一样使用枚举类。可以遍历枚举常量、访问枚举字段和方法。
// 基本使用
WeekDay monday = WeekDay.MONDAY;
System.out.println(monday instanceof Enum); // 输出true
System.out.println(monday); // 输出MONDAY
System.out.println(monday.getCode() + "-" + monday.getValue()); // 输出MONDAY-星期一
3、枚举类的内置方法
3.1 枚举类的方法:通过枚举类.方法名()进行调用。
- 1)、values():返回包含所有枚举常量的数组。
- 2)、valueOf(String name):将字符串转换为对应的枚举常量。若字符串与枚举常量名称不匹配,转换失败会报IllegalArgumentException异常。
// 枚举类方法
// 1)、values(): 返回包含所有枚举常量的数组。
WeekDay[] values = WeekDay.values();
Arrays.stream(values).forEach(item -> System.out.printf(item.getValue() + " ")); // 输出星期一 星期二 星期三 星期四 星期五 星期六 星期日
// 2)、valueOf(String name): 将字符串转换为对应的枚举常量。
WeekDay sunDay1 = WeekDay.valueOf("SUNDAY");
System.out.println(sunDay1); // 输出SUNDAY
WeekDay sunDay2 = WeekDay.valueOf("SunDay");
System.out.println(sunDay2); // 转换失败,抛出异常IllegalArgumentException
3.2 枚举常量的方法:通过枚举常量.方法名进行调用。
- 1)、final String name(): 返回枚举常量的名称。
- 2)、int ordinal():返回枚举常量在声明中的位置(从0开始)。
- 3)、String toString():返回枚举常量的名称,通常与 name() 方法相同。
- 4)、final i