文章目录
- 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. 使用场景
-  用枚举替代整数常量和字符串常量 当程序需要一组常量时,使用枚举可以使得代码更加清晰和可读,避免了硬编码的问题 
-  使用枚举常量的方法提高可读性 在定义枚举时,考虑为每个常量添加一些相关的方法,提高代码的可读性和可维护性 
-  使用枚举实现单例模式 枚举天生具备线程安全性和单例特性,可以作为实现单例模式的一种方式 
总结
枚举是一种强大的工具,用于表示一组具名的常量。通过枚举,我们可以更清晰地表达代码中的常量集合,并通过相关的属性和方法使得代码更加可读、可维护。使用枚举的最佳实践包括替代整数常量和字符串常量、为枚举常量添加有意义的方法、以及利用枚举实现单例模式等。


















