文章目录
前言
在JDK 5 之前,我们定义常量都是: public static fianl… 。
JDK 5 之后,枚举(Enum)引入了。我们可以使用枚举定义定义常量。
一、枚举
1.什么是枚举?
可以将枚举看成一种特殊的类,他的声明的变量默认就有“public static fianl”修饰。
枚举都是继承自“java.lang.Enum”类。
作用:当需要定义一组常量时,可以使用枚举类型
2.枚举使用
2.1 语法
创建枚举类需要使用“enum”关键字。创建的常量用逗号分隔。
enum 枚举名字 {
枚举体(常量列表)
}
2.2 基本使用
例如,定义一组季节(Season)的常量。最常使用这个。
如果需要使用时,只需要“枚举类名.属性名”即可,返回值是常量的名称(也就是属性名)。
public enum SeasonEnum {
SPRING, SUMMER, AUTUMN, WINTER
}
2.3 其他使用方法
给枚举属性添加一个值,该值表示枚举值为第几个季节。
注意:枚举体(属性)添加了“常量列表”,需要创建一个值,同时给该值一个构造器。
public enum SeasonEnum {
SPRING(1), SUMMER(2), AUTUMN(3), WINTER(4);
private int ordinal;
SeasonEnum(int ordinal) {
this.ordinal = ordinal;
}
/** 获取序数(也就是第几个季节) */
public int getOrdinal() {
return ordinal;
}
}
测试:获取枚举常量名称,枚举的次序,枚举的值。
可以通过“name()”和“ordinal()”方法获取值。(方法继承自枚举类的父类Enum)
SeasonEnum spring = SeasonEnum.SPRING;
System.out.printf("枚举常量的名称:%s\n枚举常数的序数:%s \n", spring.name(), spring.ordinal());
ystem.out.printf("枚举的值:%s", spring.getSequence());
输出:"SPRING"代表枚举的名称,"0"代表当前枚举在第一个位置(下标0),"1"代表他的值为1
枚举常量的名称:SPRING
枚举常数的序数:0
枚举的值:1
2.4 备注
枚举类还有一个values()方法,可以用来获取枚举类的所有枚举属性。
例如:SeasonEnum.values()。(可以获取枚举类SeasonEnum的所有属性)
3.枚举与普通类对比
- 枚举类默认继承java.lang.Enum类。
- 枚举类的构造器默认使用private修饰,枚举的构造器只在构造枚举值时被调用。
- 枚举类的所有枚举值都是“public static final ”修饰的
4.阿里巴巴枚举使用规范
4.1 命名风格
- 17.【参考】枚举类名带上 Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开。
- 说明:枚举其实就是特殊的类,域成员均为常量,且构造方法被默认强制是私有。
- 正例:枚举名字为 ProcessStatusEnum 的成员名称:SUCCESS / UNKNOWN_REASON。
参考:《阿里巴巴Java开发手册(华山版)》
4.2 常量定义
- 5.【推荐】如果变量值仅在一个固定范围内变化用 enum 类型来定义。
- 说明:如果存在名称之外的延伸属性应使用 enum 类型,下面正例中的数字就是延伸信息,表示一年中的
第几个季节。
正例:
public enum SeasonEnum {
SPRING(1), SUMMER(2), AUTUMN(3), WINTER(4);
private int seq;
SeasonEnum(int seq) {
this.seq = seq;
}
public int getSeq() {
return seq;
}
}
参考:《阿里巴巴Java开发手册(华山版)》
参考
《阿里巴巴Java开发手册(华山版)》