Java枚举(Enum)是Java编程语言中一种特殊的类,用于表示一组固定的常量值,枚举提供了一种类型安全的方式来定义一组预定义的常量,这些常量可以用于表示一组有限的可能性,枚举在Java中被广泛使用,特别是在需要表示一组固定的选项或状态时,例如星期、月份、颜色等。
枚举的定义与使用
1、枚举的定义
在Java中,枚举是通过关键字enum来定义的,枚举类型的定义格式如下:
public enum 枚举名 { 常量1, 常量2, ... }
我们可以定义一个表示星期的枚举:
public enum Weekday { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
2、枚举的使用
枚举类型的变量可以通过以下方式进行声明和初始化:
枚举名 变量名 = 枚举名.常量;
我们可以声明一个表示星期一的变量:
Weekday day = Weekday.MONDAY;
我们还可以使用==
运算符来比较两个枚举变量是否相等:
if (day == Weekday.MONDAY) { System.out.println("今天是星期一"); } else { System.out.println("今天不是星期一"); }
枚举的特性与方法
1、枚举的特性
枚举具有以下特性:
枚举类型的实例是单例的,即每个枚举常量在内存中只有一个实例,这意味着我们可以直接使用枚举常量,而不需要创建新的实例。
枚举类型默认继承自java.lang.Enum类,因此它具有Enum类提供的所有方法和属性,我们可以使用values()方法获取枚举类型的所有常量,使用ordinal()方法获取常量的序号等。
枚举类型可以实现接口,从而扩展其功能,我们可以让枚举类型实现Comparable接口,以便对枚举常量进行排序。
枚举类型可以包含构造函数、方法和字段,这使得我们可以为枚举常量添加额外的逻辑和数据,构造函数必须是私有的,以防止外部创建新的枚举实例。
2、枚举的方法
枚举类型继承了Enum类,因此它具有Enum类提供的一些常用方法,如name()、ordinal()、valueOf()等,我们还可以在枚举类型中自定义方法,我们可以让枚举类型实现一个打印星期的方法:
public enum Weekday { MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY("星期三"), THURSDAY("星期四"), FRIDAY("星期五"), SATURDAY("星期六"), SUNDAY("星期日"); private String description; Weekday(String description) { this.description = description; } public void printDescription() { System.out.println(description); } }
我们可以使用这个方法来打印星期的描述:
Weekday day = Weekday.MONDAY; day.printDescription(); // 输出:星期一
与其他数据类型的转换与比较
1、与其他数据类型的转换:我们可以使用Enum类的静态方法valueOf()将其他数据类型转换为枚举类型,我们可以将字符串转换为表示星期的枚举变量:
String dayStr = "MONDAY"; Weekday day = Weekday.valueOf(dayStr); // day现在是Weekday.MONDAY的实例
2、与其他数据类型的比较:由于枚举类型是单例的,因此我们可以直接使用==运算符比较两个枚举变量是否相等。
if (day == Weekday.MONDAY) { // true,因为day现在是Weekday.MONDAY的实例,与Weekday.MONDAY相等} else { // false} if (day != Weekday.FRIDAY) { // true,因为day现在是Weekday.MONDAY的实例,与Weekday.FRIDAY不相等} else { // false} if (day == null) { // false,因为day现在是Weekday.MONDAY的实例,不为null} else { // true} if (weekday == Weekday.SUNDAY || weekday == Weekday.SATURDAY) { // true,因为weekday可以是Weekday.SUNDAY或Weekday.SATURDAY的实例} else { // false} if (weekday == null) { // false,因为weekday不能是null} else { // true} if (weekday == Weekday.valueOf("TUESDAY")) { // true,因为weekday可以是Weekday.TUESDAY的实例} else { // false} if (weekday == Weekday.valueOf("INVALID")) { // false,因为"INVALID"不是一个有效的星期描述} else { // true} if (weekday == Weekday.MONDAY || weekday == Weekday.TUESDAY || weekday == Weekday.WEDNESDAY) { // true,因为weekday可以是Weekday.MONDAY、Weekday.TUESDAY或Weekday.WEDNESDAY的实例} else { // false} if (weekday != null && weekday != Weekday.FRIDAY && weekday != Weekday.SATURDAY && weekday != Weekday.SUNDAY) { // true,因为weekday可以是除周五、周六和周日之外的任何星期的实例} else { // false} if (weekday != null && weekday != Weekday.FRIDAY && weekday != Weekday.SATURDAY && weekday != Weekday.SUNDAY && weekday != Weekday.MONDAY && weekday != Weekday.TUESDAY && weekday != Weekday.WEDNESDAY && weekday != Weekday.THURSDAY) { // true,因为weekday可以是除周五、周六、周日和周一至周四之外的任何星期的实例} else { // false} if (weekday != null && weekday == Weekday.valueOf("TUESDAY")) { // true,因为weekday可以是Weekday.TUESDAY的实例} else { // false} if (weekday != null && weekday == Weekday.valueOf("INVALID")) { // false,因为"INVALID"不是一个有效的星期描述} else { // true} if (weekday != null && weekday == Weekday.valueOf("TUESDAY") || weekday == Weekday.valueOf("WEDNESDAY")) { // true,因为weekday可以是Weekday.TUESDAY或Weekday.WEDNESDAY的实例} else { // false} if (weekday != null && weekday == Weekdia
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/173420.html