一、什么是枚举
枚举,顾名思义就是一个个的列出来,和类以及接口是同一个级别的类型,本质就是类(final类)。它用于声明一组命名的常数的集合,当一个变量有几种可能的取值时,可以将它定义为枚举类型。Java中由关键字enum来定义一个枚举类型。定义一个简单的枚举:
这个枚举定义了两个常量,分别是ENABLE和DISABLE,表示当状态值code为0时所对应的状态名name是开启,当状态值code为1时所对应的状态名name是关闭。public enum DemoEnums {
ENABLE(0, "开启"),
DISABLE(1, "关闭");
/**
* 状态值
*/
private final Integer code;
/**
* 状态名
*/
private final String name;
}
二、枚举的特性
- 枚举类继承了抽象类Enum的类,extends java.lang.Enum<>
- 通过一段静态代码块初始化枚举。
- 使用 enum 定义的非抽象的枚举类默认会使用 final 修饰,因此非抽象枚举类不能派生子类(即不能被继承)。
- 枚举类的所有实例必须在枚举类的第一行显示列出,否则这个枚举类永远都不可能产生实例。列出的这些实例,系统会自动给它们加上 public static final 修饰。枚举类的实例以逗号分隔,分号结束,这些列出的枚举值代表了该枚举类的所有可能的实例。
- 枚举类的构造器只能使用 private 访问控制符,强制指定其他的访问控制符(例如public、procted等)会报错。
三、使用场景
- 它通常用于表示一组有关联关系的常量,使代码更加易读、安全。比如一周的天数、月份、季节......
- 作为switch的入参( 大大的优化代码的可读性和维护性)
- 单例模式的实现
/**
*一周七天的枚举
*/
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");
标签:Java,31,enum,days,枚举,单例,public
From: https://www.cnblogs.com/nliu/p/17533087.html