Java基础——枚举enum

一、什么是枚举

枚举,顾名思义就是一个个的列出来,和类以及接口是同一个级别的类型,本质就是类(final类)。它用于声明一组命名的常数的集合,当一个变量有几种可能的取值时,可以将它定义为枚举类型。Java中由关键字enum来定义一个枚举类型。

定义一个简单的枚举:

这个枚举定义了两个常量,分别是ENABLE和DISABLE,表示当状态值code为0时所对应的状态名name是开启,当状态值code为1时所对应的状态名name是关闭。
@Getter
@AllArgsConstructor
public enum DemoEnums {

    ENABLE(0, "开启"),
    DISABLE(1, "关闭");

    /**
     * 状态值
     */
    private final Integer code;
    /**
     * 状态名
     */
    private final String name;
}

二、枚举的特性

  1. 枚举类继承了抽象类Enum的类,extends java.lang.Enum<>
  2. 通过一段静态代码块初始化枚举。
  3. 使用 enum 定义的非抽象的枚举类默认会使用 final 修饰,因此非抽象枚举类不能派生子类(即不能被继承)。
  4. 枚举类的所有实例必须在枚举类的第一行显示列出,否则这个枚举类永远都不可能产生实例。列出的这些实例,系统会自动给它们加上 public static final 修饰。枚举类的实例以逗号分隔,分号结束,这些列出的枚举值代表了该枚举类的所有可能的实例。
  5. 枚举类的构造器只能使用 private 访问控制符,强制指定其他的访问控制符(例如public、procted等)会报错。

三、使用场景

  1. 它通常用于表示一组有关联关系的常量,使代码更加易读、安全。比如一周的天数、月份、季节......
  2. 作为switch的入参( 大大的优化代码的可读性和维护性)
  3. 单例模式的实现
/**
 *一周七天的枚举
 */
public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
/**
 *每月多少天的枚举
 */
public enum Month {
    JANUARY(31),
    FEBRUARY(28),
    MARCH(31),
    APRIL(30),
    MAY(31),
    JUNE(30),
    JULY(31),
    AUGUST(31),
    SEPTEMBER(30),
    OCTOBER(31),
    NOVEMBER(30),
    DECEMBER(31);

    private final int days;

    Month(int days) {
        this.days = days;
    }

    public int getDays() {
        return days;
    }
}
使用
//使用1
Day day = Day.MONDAY;
switch (day) {
    case MONDAY:
        System.out.println("Today is Mondays");
        break;
    case FRIDAY:
        System.out.println("Today is Fridays");
        break;
    default:
        System.out.println("#######");
        break;
} //输出:Today is Mondays

//使用2
Month month = Month.FEBRUARY;
System.out.println("February has " + month.getDays() + " days.");
 //输出:February has 28 days.

单例模式举例

枚举单例(Enum Singleton)是实现单例模式的一种新方式,尽管单例模式在java中已经存在很长时间了,但是枚举单例相对来说是一种比较新的概念。
public enum EasySingleton{
    INSTANCE;
}
枚举类的每一个对象都是唯一的,所以一个枚举类中只有一个对象的时候就是单例模式。
//使用
Singleton singleton = Singleton.INSTANCE;
singleton.execute("Do something");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值