怀旧网,博客详情:java枚举类详解

1、java枚举类详解

2、java String 类和类方法详解

3、StringBuffer 详解

4、Java Math 类详解

5、java random详解

6、java Date类使用讲解

7、java 集合类详解

8、java算法二分查找

9、SpringBoot 在初始化加载无法使用@Value的时候读取配置文件教程

10、springboot 项目配置本地jar包导入

11、单个java文件运行需要带上jar包的用法

12、spring boot 项目配置https服务

13、Java异常详解

14、Java Collection的使用

15、Java List 集合

16、Java ArrayList 介绍

17、Java LinkedList 讲解

18、Java Set 集合介绍

19、Java HashSet 介绍

20、Java TreeSet 介绍

21、Java Map 介绍以及子类介绍

22、Java 多线程使用介绍

23、Java 注解讲解

24、Java 反射讲解

25、Java 反射讲解

26、HashMap 源码讲解

27、面向对象初级教学

28、Java整合JWT使用

原创

java枚举类详解

java枚举类详解

什么是枚举

Java中的枚举是一种类型,顾名思义:就是一个一个列举出来。所以它一般都是表示一个有限的集合类型,它是一种类型,在维基百科中给出的定义是:

在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠.。枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见,例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。

枚举的意义(为了让单例模式,变为多例)简约写法

单例模式写法

// 季节类
public class season {
    // 构造方法私有化,不能外部创建该对象
    private season(){}
    // 春天单例模式
    public static final season spring = new season();
    // 夏天单例模式
    public static final season summer = new season();
    // 秋天单例模式
    public static final season autumn = new season();
    // 冬天单例模式
    public static final season winter = new season();
}

枚举类使用写法

// 季节类
public enum season {
    // 春天
    spring,
    // 夏天
    summer,
    // 秋天
    autumn,
    // 冬天
    winter;
}

运行结果如下

spring summer autumn winter

实现原理:

在枚举内部,将每个变量定义为单例的写法,并且重写了里面的toString方法, 写法就是更具里面的hashcode编码来判断hashcode的值,来返回对应的枚举变量的名称。

在枚举类,或者单例模式类里面的成员变量里面的hashcode值,是不会发生改变的,每次程序运行的值都是相同的:

com.huaijiuwang.test.season@4554617c com.huaijiuwang.test.season@74a14482 com.huaijiuwang.test.season@1540e19d com.huaijiuwang.test.season@677327b6

所以可以根据hashcode值来进行判断,判断条件满足返回对应变量名的字符串。

@Override
public String toString() {
    // 将hashcode值转为10进制
    // 春天 com.huaijiuwang.test.season@4554617c
    int spring = Integer.parseInt("4554617c", 16);
    // 夏天 com.huaijiuwang.test.season@74a14482
    int summer = Integer.parseInt("74a14482", 16);
    // 秋天 com.huaijiuwang.test.season@1540e19d
    int autumn = Integer.parseInt("1540e19d", 16);
    // 冬天 com.huaijiuwang.test.season@677327b6
    int winter = Integer.parseInt("677327b6", 16);

    if(spring == this.hashCode()){
        return "输出内容春天";
    }
    if(summer == this.hashCode()){
        return "输出内容夏天";
    }
    if(autumn == this.hashCode()){
        return "输出内容秋天";
    }
    if(winter == this.hashCode()){
        return "输出内容冬天";
    }

    return "null";
}

调用单例模式,查看运行结果

public class Test1{
    public static void main(String[] args){
        System.out.println(season.spring);
        System.out.println(season.summer);
        System.out.println(season.autumn);
        System.out.println(season.winter);
    }
}

输出结果

输出内容春天 输出内容夏天 输出内容秋天 输出内容冬天

简介写法,代替判断hashcode方式

// 季节类
public class season {
    // 定义变量,保存当前的实例名称
    private String name;
    // 构造方法私有化,不能外部创建该对象
    private season(){}
    // 有参构造方法,用来记录当前调用的对象名称
    private season(String name){
        this.name = name;
    }
    // 春天单例模式
    public static final season spring = new season("输出内容春天");
    // 夏天单例模式
    public static final season summer = new season("输出内容夏天");
    // 秋天单例模式
    public static final season autumn = new season("输出内容秋天");
    // 冬天单例模式
    public static final season winter = new season("输出内容冬天");

    @Override
    public String toString() {
        return this.name;
    }
}

输出类容如下

输出内容春天 输出内容夏天 输出内容秋天 输出内容冬天

同理,我们的枚举类,就可以改写为

// 季节类
public enum season {
    // 春天
    spring("春天"),
    // 夏天
    summer("夏天"),
    // 秋天
    autumn("秋天"),
    // 冬天
    winter("冬天");

    // 记录季节成员变量
    private String name;
    // 私有构造方法
    private season(){}
    // 带参私有构造方法
    private season(String name){
        this.name = name;
    }
}

但是运行结果并未被改变如下

spring summer autumn winter

继续重写toString方法

// 季节类
public enum season {
    // 春天
    spring("春天"),
    // 夏天
    summer("夏天"),
    // 秋天
    autumn("秋天"),
    // 冬天
    winter("冬天");

    // 记录季节成员变量
    private String name;
    // 私有构造方法
    private season(){}
    // 带参私有构造方法
    private season(String name){
        this.name = name;
    }

    @Override
    public String toString() {
        return this.name;
    }
}

输出结果如下(效果达成)

春天 夏天 秋天 冬天

个人建议

在编写枚举类的时候,变量推荐全部使用大写的英文字母

// 季节类
public enum season {
    // 春天
    SPRING("春天"),
    // 夏天
    SUMMER("夏天"),
    // 秋天
    AUTUMN("秋天"),
    // 冬天
    WINTER("冬天");

    // 记录季节成员变量
    private String name;
    // 私有构造方法
    private season(){}
    // 带参私有构造方法
    private season(String name){
        this.name = name;
    }

    @Override
    public String toString() {
        return this.name;
    }
}

最后感谢各位的观看,博客发布者:怀旧。博客发布网站为:怀旧个人博客网,感谢各位支持。。。

  • 平台作者:怀旧(联系作者)
  • QQ:444915368
  • 邮箱:444915368@qq.com
  • 电话:17623747368
  • 评论

    登录后才可以进行评论哦!

    回到顶部 留言