Java枚举

Java枚举

1、什么是枚举

枚举类型在本质上也是一个类,但是由于编译器自动做了很多事情,因此它的使用更为便捷、安全和方便。

枚举是有穷尽的,有些类的实例对象是固定的。例如季节(Season),只有春(SPRING)、夏(SUMMER)、秋(AUTUMN)、冬(WINTER)这四个,这时候的枚举作用就出来了,可以使用switch…case语句来进行枚举类型的判断。

枚举是一组相同类型的有限个数的数据,每一个枚举类型都是当前枚举类的一个对象。

//获取当前的一个季节的枚举类型,返回的是一个季节的对象
Season season = Season.SPRING;

2、定义枚举类型

①定义枚举的语法

  1. 在枚举类中,枚举类型总是定义在其他字段/方法/构造器的前面。枚举以逗号分隔,分号结束。枚举类型结束之后才能开始写其他内容。
  2. 在枚举类中,每一个枚举类型都是当前枚举类的一个对象。
  3. 如果枚举需要维护成员变量,必须要提供私有构造方法,并且每一个枚举类型都要维护上成员变量,而想要获取成员变量就需要提供字段以及相对应的getter/setter方法。注!构造器默认私有化,因为枚举类型的初始化都要在当前类中完成。

语法:

public enum 枚举类名称{

​ 枚举类型1,

​ 枚举类型2,

​ 枚举类型3;

}

②定义一个简单的枚举类型

仍然拿春夏秋冬举例:

/**
 * 这是一个季节对象的枚举类
 */
public enum Season {
    /**
     * <p>在枚举类中,枚举类型是以逗号分割,而且必须是在其他字段、构造器、方法的上面写,以分号结尾才能开始写其他内容</p>
     * <p>在枚举类中,每一个枚举类型都是一个当前类的一个对象</p>
     */
    SPRING,
    SUMMER,
    AUTUMN,
    WINTER;
}

可以使用字符串儿进行是否符合当前枚举类型的判断or直接调用枚举类型:

@Test
public void testSeasonEnum() {
    //String param = "SUMMER";
    //Season season = Season.valueOf(param);  //通过valueof比较获取到枚举对象
    //  or
    Season season = Season.SPRING;  //返回的是一个季节的春季对象
    //用在switch——case中
    switch (season) {
        case SPRING:
            System.out.println("这是一个春天");
            break;
        case SUMMER:
            System.out.println("这是一个夏天");
            break;
        case AUTUMN:
            System.out.println("这是一个秋天");
            break;
        case WINTER:
            System.out.println("这是一个冬天");
            break;
    }
}

输出:
在这里插入图片描述

③定义较复杂的一个枚举类

如果想要在春夏秋冬的枚举类型中输数当前是什么季节和季节特征的描述,就需要在枚举类型中进行成员变量的维护。而变量的顺序对应的是构造方法中变量的顺序。

/**
 * 这是一个季节对象的枚举类
 */
public enum Season2 {
    /**
     * <p>在枚举类中,枚举类型是以逗号分割,而且必须是在其他字段、构造器、方法的上面写,以分号结尾才能开始写其他内容</p>
     * <p>在枚举类中,每一个枚举类型都是一个当前类的一个对象</p>
     * <p>枚举变量在最前面定义,如果有成员变量需要维护,必须所有的对象全部要维护上成员变量:如seasonName和seasonDesc</p>
     */
    SPRING("春天", "这是一个和风细雨的春天!"),
    SUMMER("夏天", "这是一个烈日炎炎的夏天!"),
    AUTUMN("秋天", "这是一个秋高气爽的秋天!"),
    WINTER("冬天", "这是一个寒风凛凛的冬天!");

    private String seasonName;
    private String seasonDesc;

    /**
     * 枚举类型的构造函数默认为private,因为枚举类型的初始化要在当前枚举类中完成。
     * 通过构造器可以给枚举类型传递值,在没有空构造器的时候必须要对枚举类型赋值
     * 如果想要获取到当前对象(枚举类型的值可以指定字段和getter/setter方法来获取)
     *
     * @param seasonName
     * @param seasonDesc
     */
    private Season2(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

    public String getSeasonName() {
        return seasonName;
    }

    public void setSeasonName(String seasonName) {
        this.seasonName = seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }

    public void setSeasonDesc(String seasonDesc) {
        this.seasonDesc = seasonDesc;
    }
}

这里同样可以使用字符串儿进行是否符合当前枚举类型的判断or直接调用枚举类型:

@Test
public void testSeason2Enum() {
    String param = "SUMMER";
    Season2 season2 = Season2.valueOf(param);  //通过valueof比较获取到枚举对象
    // or
    //Season2 season2 = Season2.SPRING;
    //用在switch——case中,从枚举对象中获取当前季节的名称以及季节的描述
    switch (season2) {
        case SPRING:
            System.out.println(season2.getSeasonName() + ":" + season2.getSeasonDesc());
            break;
        case SUMMER:
            System.out.println(season2.getSeasonName() + ":" + season2.getSeasonDesc());
            break;
        case AUTUMN:
            System.out.println(season2.getSeasonName() + ":" + season2.getSeasonDesc());
            break;
        case WINTER:
            System.out.println(season2.getSeasonName() + ":" + season2.getSeasonDesc());
            break;
    }
}

输出结果:
在这里插入图片描述

3、枚举类型定义返回状态及描述信息

/**
 * 定义返回状态码的枚举类型
 */
public enum ResultCode {
    //定义返回状态的枚举类型
    SUCCESS(1, "返回成功!"),
    FAIL(-999, "未知错误!");

    /**
     * 返回状态码
     */
    private Integer code;
    /**
     * 状态码信息描述
     */
    private String message;

    private ResultCode(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

测试:

@Test
public void testGetResultCode() {
    System.out.println(ResultCode.SUCCESS.getCode() + ":" + ResultCode.SUCCESS.getMessage());
}

输出:
在这里插入图片描述

参考连接

https://blog.csdn.net/cauchy6317/article/details/82313088

https://blog.csdn.net/weixin_42740530/article/details/106474224

https://baike.baidu.com/item/%E6%9E%9A%E4%B8%BE%E7%B1%BB%E5%9E%8B/2978296

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白说(๑• . •๑)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值