【Java 基础】26 枚举

1. 什么是枚举

枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。

在 Java中,枚举是一种特殊的数据类型,用于表示一组具名的常量。

枚举类型可以包含零个或多个枚举常量,每个常量都是该枚举类型的一个实例。使用枚举可以使代码更加清晰、可读,并避免使用整数或字符串常量进行硬编码。

源码:
在这里插入图片描述

Enum 的定义,我们可以看到它实现了 ComparableSerializable 两个接口,说明了枚举类型可以使用比较器或者序列化操作。

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. 使用场景

  • 用枚举替代整数常量和字符串常量

    当程序需要一组常量时,使用枚举可以使得代码更加清晰和可读,避免了硬编码的问题

  • 使用枚举常量的方法提高可读性

    在定义枚举时,考虑为每个常量添加一些相关的方法,提高代码的可读性和可维护性

  • 使用枚举实现单例模式

    枚举天生具备线程安全性和单例特性,可以作为实现单例模式的一种方式

总结

枚举是一种强大的工具,用于表示一组具名的常量。通过枚举,我们可以更清晰地表达代码中的常量集合,并通过相关的属性方法使得代码更加可读、可维护。使用枚举的最佳实践包括替代整数常量和字符串常量、为枚举常量添加有意义的方法、以及利用枚举实现单例模式等。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值