【Java 基础】枚举(Enum)的使用

【Java 基础】枚举(Enum)的使用

前言

在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开发手册(华山版)》

Java高级特性-枚举

Java 枚举(enum) 详解7种常见的用法