Java 枚举(enum)常用操作笔记

前言

  • Java 枚举是一个特殊的,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。

  • 枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。

  • Java 枚举类使用 enum 关键字来定义,各个常量使用逗号,来分割。

  • 枚举内部构造方法是私有的,构造方法不写private没有问题。

在以下案例中,我们围绕季节定义一个枚举类SeasonEnum,根据该枚举类介绍其使用方法。

一、枚举类常量使用

1.1 定义枚举类

定义枚举类时,建议在最后添加Enum后缀,如SeasonEnum,枚举类型的实例对象建议全大写

public enum SeasonEnum {
    
    
	// 每个枚举常量之间用,进行分割,系统会为这些常量自动添加 public static final修饰
	SPRING, SUMMER, AUTUMN, WINTER
}

1.2 常用方法

  1. 直接使用SeasonEnum枚举类,对枚举常量进行调用
  2. 直接调用枚举类的values()方法获取枚举常量数组,针对某一个枚举常量调用ordinal()获取其下标
  3. 调用枚举类的valueOf(String s)方法,传入String变量获取枚举常量
  4. 搭配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 定义枚举类

  1. 定义带参数的枚举,即添加成员变量
  2. 向枚举中添加新的静态方法
  3. 覆盖枚举的方法
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 方法调用示例

  1. 覆盖toString()方法后,打印枚举常量基础信息
  2. 调用自定义的静态方法,根据月份获取季节中文名字
  3. 获取枚举常量对应的成员变量信息
  4. 修改枚举常量对应的成员变量信息
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}
}

猜你喜欢

转载自blog.csdn.net/weixin_43730812/article/details/128468051
今日推荐