前言
- Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。
- 枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。
- Java 枚举类使用
enum
关键字来定义,各个常量使用逗号,
来分割。 - 枚举内部构造方法是私有的,构造方法不写private没有问题。
在以下案例中,我们围绕季节定义一个枚举类SeasonEnum
,根据该枚举类介绍其使用方法。
一、枚举类常量使用
1.1 定义枚举类
定义枚举类时,建议在最后添加Enum
后缀,如SeasonEnum
,枚举类型的实例对象建议全大写
public enum SeasonEnum {
// 每个枚举常量之间用,进行分割,系统会为这些常量自动添加 public static final修饰
SPRING, SUMMER, AUTUMN, WINTER
}
1.2 常用方法
- 直接使用SeasonEnum枚举类,对枚举常量进行调用
- 直接调用枚举类的
values()
方法获取枚举常量数组,针对某一个枚举常量调用ordinal()
获取其下标 - 调用枚举类的
valueOf(String s)
方法,传入String变量获取枚举常量 - 搭配switch语句进行逻辑判断
public static void main(String[] args) {
// 1、直接调用枚举类型 // 如下为打印结果
System.out.println(SeasonEnum.SPRING); // SPRING
System.out.println(SeasonEnum.SUMMER); // SUMMER
System.out.println(SeasonEnum.AUTUMN); // AUTUMN
System.out.println(SeasonEnum.WINTER); // WINTER
// 2、直接调用枚举类的values()方法,得到枚举常量数组
SeasonEnum[] seasonEnums = SeasonEnum.values();
// 针对某一个枚举常量调用ordinal()方法获取其下标,下标从0开始
for (SeasonEnum seasonEnum : seasonEnums) {
System.out.println(seasonEnum + "下标为:" + seasonEnum.ordinal());
// SPRING下标为:0
// SUMMER下标为:1
// AUTUMN下标为:2
// WINTER下标为:3
}
// 3、通过枚举类型获取SUMMER的枚举类型
String summer = "SUMMER";
SeasonEnum seasonEnum = SeasonEnum.valueOf(summer);
System.out.println(seasonEnum); // SUMMER
// 4、搭配switch语句使用
switch (seasonEnum) {
case SPRING:
System.out.println("春天");
break;
case SUMMER:
System.out.println("夏天"); // 夏天
break;
case AUTUMN:
System.out.println("秋天");
break;
case WINTER:
System.out.println("冬天");
break;
}
}
二、枚举类常量进阶使用
2.1 定义枚举类
- 定义带参数的枚举,即添加成员变量
- 向枚举中添加新的静态方法
- 覆盖枚举的方法
public enum SeasonEnum {
SPRING("春天",3), SUMMER("夏天",6), AUTUMN("秋天",9), WINTER("冬天",12);
// 1、定义季节中文名字和季节月份成员变量
private String name;
private int month;
// 枚举类型的构造方法默认时私有的,系统会自动添加 private 修饰
SeasonEnum (String name, int month) {
this.name = name;
this.month = month;
}
// 2、向枚举中添加新方法, 根据月份返回季节中文名字
public static String getName(int month){
for (SeasonEnum seasonType : SeasonEnum.values()) {
if (seasonType.getMonth() == month) {
return seasonType.getName();
}
}
return null;
}
// 3、覆盖枚举的toString()方法
@Override
public String toString() {
return "SeasonEnum{" +
"name='" + name + '\'' +
", month=" + month +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
}
2.2 方法调用示例
- 覆盖
toString()
方法后,打印枚举常量基础信息 - 调用自定义的静态方法,根据月份获取季节中文名字
- 获取枚举常量对应的成员变量信息
- 修改枚举常量对应的成员变量信息
public static void main(String[] args) {
// 1、打印枚举常量基础信息
SeasonEnum[] seasonEnums = SeasonEnum.values();
for (SeasonEnum seasonEnum : seasonEnums) {
System.out.println(seasonEnum);
// SeasonEnum{name='春天', month=3}
// SeasonEnum{name='夏天', month=6}
// SeasonEnum{name='秋天', month=9}
// SeasonEnum{name='冬天', month=12}
}
// 2、调用自定义的静态方法,根据月份获取季节中文名字
String season = SeasonEnum.searchName(12);
System.out.println(season); // 冬天
// 3、获取枚举常量对应的成员变量信息
SeasonEnum spring = SeasonEnum.SPRING;
String name = spring.getName();
int month = spring.getMonth();
System.out.println("当前季节是:" + name + ", 所处月份为:" + month); // 当前季节是:春天, 所处月份为:3
// 4、修改枚举常量对应的成员变量信息
spring.setName("春天到了");
spring.setMonth(1);
System.out.println(spring); // SeasonEnum{name='春天到了', month=1}
}