📌 目录
1. 什么是枚举?
枚举(enum) 是 Java 中的一种特殊类型,用于表示一组固定的常量。它可以代替常规的 int
常量,提高代码的可读性和可维护性。枚举类型是类的一种,定义了固定的实例,并可以提供一些额外的功能。通常用于表示一组相关的常量,如星期几、月份、方向等。
2. 枚举的声明与定义
在 Java 中,枚举类型使用 enum
关键字声明。枚举类型可以定义在类外部,也可以定义在类内部。每个枚举实例相当于一个常量,枚举成员由 ,
分隔。
基本语法:
enum EnumName {
CONSTANT1, CONSTANT2, CONSTANT3;
}
示例:定义枚举类型 Day
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
3. 枚举的特性
- 类型安全:枚举类型是强类型的,只能使用定义的常量,不允许其他值。
- 默认方法:枚举类型继承自
java.lang.Enum
类,默认拥有一些方法。 - 构造器:枚举类可以有构造方法,但构造方法只能是
private
的。 - 成员变量和方法:枚举类型可以有成员变量和方法,每个枚举常量是一个对象,可以包含不同的属性和行为。
- 枚举常量是单例:枚举类的每个常量只能实例化一次,因此具有单例特性。
4. 枚举常用方法
枚举类型继承了 Enum
类,因此可以使用 Enum
类中的一些常用方法:
- values():返回所有枚举常量的数组。
- valueOf(String name):根据指定的名字返回对应的枚举常量。
- ordinal():返回枚举常量的索引值(从 0 开始)。
- name():返回枚举常量的名字。
示例:
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
// 返回枚举常量的索引
public int getDayIndex() {
return this.ordinal();
}
}
public class TestEnum {
public static void main(String[] args) {
// 使用 values() 方法
Day[] days = Day.values();
for (Day day : days) {
System.out.println(day);
}
// 使用 valueOf() 方法
Day friday = Day.valueOf("FRIDAY");
System.out.println("Friday's index: " + friday.getDayIndex());
}
}
输出:
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY
Friday's index: 4
5. 枚举的应用场景
- 定义固定的常量集:如星期几、月份、季节、方向等。
- 代替
int
常量:可以用枚举来代替int
常量的定义,使代码更具可读性和类型安全。 - 状态表示:例如订单状态、任务状态等,可以通过枚举类型清晰地表示状态。
- 策略模式:使用枚举类型来表示不同的策略或行为,通过枚举的实例来控制不同的处理逻辑。
6. 枚举与 switch
语句
枚举类型与 switch
语句结合使用时,可以根据枚举的不同常量执行不同的代码逻辑。
示例:
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
public class SwitchEnumExample {
public static void main(String[] args) {
Day day = Day.MONDAY;
switch (day) {
case MONDAY:
System.out.println("Start of the week!");
break;
case FRIDAY:
System.out.println("End of the week!");
break;
case SATURDAY:
case SUNDAY:
System.out.println("Weekend!");
break;
default:
System.out.println("Midweek day.");
break;
}
}
}
输出:
Start of the week!
7. 枚举的示例代码
示例 1:枚举与属性
enum Season {
SPRING("Spring", 20), SUMMER("Summer", 30), FALL("Fall", 15), WINTER("Winter", 0);
private final String name;
private final int averageTemperature;
// 构造方法
Season(String name, int averageTemperature) {
this.name = name;
this.averageTemperature = averageTemperature;
}
public String getName() {
return name;
}
public int getAverageTemperature() {
return averageTemperature;
}
}
public class TestSeason {
public static void main(String[] args) {
for (Season season : Season.values()) {
System.out.println(season.getName() + ": " + season.getAverageTemperature() + "°C");
}
}
}
输出:
Spring: 20°C
Summer: 30°C
Fall: 15°C
Winter: 0°C
示例 2:枚举与方法
enum Direction {
NORTH, EAST, SOUTH, WEST;
// 枚举类可以包含方法
public void printDirection() {
switch (this) {
case NORTH:
System.out.println("Heading North");
break;
case EAST:
System.out.println("Heading East");
break;
case SOUTH:
System.out.println("Heading South");
break;
case WEST:
System.out.println("Heading West");
break;
}
}
}
public class TestDirection {
public static void main(String[] args) {
Direction direction = Direction.NORTH;
direction.printDirection(); // 输出:Heading North
}
}
输出:
Heading North
8. 枚举的高级用法
- 实现接口:枚举可以实现接口,从而增加一些行为。
- 自定义构造方法:枚举类型可以有自定义构造方法,用来为每个枚举常量指定不同的属性值。
- 覆写方法:枚举类型可以覆写
toString()
方法,提供自定义的输出。
示例:实现接口
interface Movable {
void move();
}
enum Vehicle implements Movable {
CAR, BIKE, PLANE;
@Override
public void move() {
switch (this) {
case CAR:
System.out.println("Car is moving");
break;
case BIKE:
System.out.println("Bike is moving");
break;
case PLANE:
System.out.println("Plane is flying");
break;
}
}
}
public class TestEnumWithInterface {
public static void main(String[] args) {
Vehicle car = Vehicle.CAR;
car.move(); // 输出:Car is moving
}
}
发表回复