文章目录
- 1. 什么是枚举
- 2. 定义
- 3. 使用
- 1)常量
- 2)遍历
- 3)switch
- 4. 属性和方法
- 1)属性
- 2)方法
- 5. 实现原理
- 6. 使用场景
- 总结
1. 什么是枚举
枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。
在 Java中,枚举是一种特殊的数据类型,用于表示一组具名的常量。
枚举类型可以包含零个或多个枚举常量,每个常量都是该枚举类型的一个实例。使用枚举可以使代码更加清晰、可读,并避免使用整数或字符串常量进行硬编码。
源码:
从 Enum
的定义,我们可以看到它实现了 Comparable
和 Serializable
两个接口,说明了枚举类型可以使用比较器或者序列化操作。
2. 定义
枚举类型是通过 enum
关键字来定义的
示例代码:
public enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
在这个例子中,我们定义了一个名为 Day
的枚举类型,包含了一周的所有天。每个枚举常量都是 Day
类型的一个实例,代表一个特定的天。
3. 使用
1)常量
枚举常量可以直接用于程序中
Day today = Day.SATURDAY;
if (today == Day.SATURDAY || today == Day.SUNDAY) {System.out.println("放假啦!!!");
} else {System.out.println("搬砖中。。。");
}
2)遍历
通过 values()
方法获取枚举类型的所有常量进行遍历
示例代码:
public class Demo {public static void main(String[] args) {for (Day day : Day.values()) {System.out.println(day);}}
}
enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
输出结果:
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY
3)switch
枚举经常与 switch
语句结合使用,使得代码更加清晰
示例代码:
public class Demo {public static void main(String[] args) {Day today = Day.SATURDAY;switch (today) {case MONDAY:case TUESDAY:case WEDNESDAY:case THURSDAY:case FRIDAY:System.out.println("搬砖中。。。");break;case SATURDAY:case SUNDAY:System.out.println("放假啦。。。");break;default:System.out.println("错误的星期");break;}}
}
enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
输出结果:
放假啦。。。
4. 属性和方法
1)属性
枚举可以包含属性,每个枚举常量可以拥有自己的属性
示例代码:
enum Day {MONDAY("Mon"),TUESDAY("Tue"),WEDNESDAY("Wed"),THURSDAY("Thu"),FRIDAY("Fri"),SATURDAY("Sat"),SUNDAY("Sun");// 自定义属性private final String subName;Day(String subName) {this.subName = subName;}public String getSubName() {return subName;}
}
每个枚举常量都有一个名为 subName
的属性,代表了星期的简写
2)方法
枚举可以定义方法,使得每个枚举常量可以具有自己的行为
示例代码:
enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;// 自定义方法public boolean isWeekend() {return this == SATURDAY || this == SUNDAY;}
}
在这个例子中,我们为枚举定义了一个方法 isWeekend()
,用于判断当前枚举常量是否表示周末
5. 实现原理
枚举类型本质上是一种特殊的类
编译器会在创建枚举时自动添加一些特殊的方法,例如 values()
方法用于获取所有枚举常量
6. 使用场景
-
用枚举替代整数常量和字符串常量
当程序需要一组常量时,使用枚举可以使得代码更加清晰和可读,避免了硬编码的问题
-
使用枚举常量的方法提高可读性
在定义枚举时,考虑为每个常量添加一些相关的方法,提高代码的可读性和可维护性
-
使用枚举实现单例模式
枚举天生具备线程安全性和单例特性,可以作为实现单例模式的一种方式
总结
枚举是一种强大的工具,用于表示一组具名的常量。通过枚举,我们可以更清晰地表达代码中的常量集合,并通过相关的属性和方法使得代码更加可读、可维护。使用枚举的最佳实践包括替代整数常量和字符串常量、为枚举常量添加有意义的方法、以及利用枚举实现单例模式等。