• Java枚举类 (详细解析java中的枚举类深入浅出)


    java枚举类

    如果觉得本文章对你有帮助三连支持一下

    在这里插入图片描述

    说明:

    枚举类是一种特殊的数据类型

    自定义枚举类:

    package code06;
    
    public class EnumClass01 {
        public static void main(String[] args) {
            Season spring = Season.SPRING;//获取自定义的枚举
            Season summer = Season.SUMMER;
            Season autumn = Season.AUTUMN;
            Season winter = Season.WINTER;
    
            System.out.println(spring);
            System.out.println(summer);
            System.out.println(autumn);
            System.out.println(winter);
        }
    
    }
    
    class Season {
        public String name;
        public String desc;
        public static Season SPRING = new Season("春天", "温暖");
        public static Season SUMMER = new Season("夏天", "酷热");
        public static Season AUTUMN = new Season("秋天", "凉爽");
        public static Season WINTER = new Season("冬天", "寒冷");
    
        private Season(String name, String desc) {
            this.name = name;
            this.desc = desc;
    
        }
    
        @Override
        public String toString() {
            return "Season{" +
                    "name='" + name + '\'' +
                    ", desc='" + desc + '\'' +
                    '}';
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    打印结果

    Season{name='春天', desc='温暖'}
    Season{name='夏天', desc='酷热'}
    Season{name='秋天', desc='凉爽'}
    Season{name='冬天', desc='寒冷'}
    
    • 1
    • 2
    • 3
    • 4

    下面使用枚举类实现体验枚举类的简洁方便

    package code06;
    
    public class EnumClass01 {
        public static void main(String[] args) {
            Season spring = Season.SPRING;//直接.就可以使用
            Season summer = Season.SUMMER;
            Season autumn = Season.AUTUMN;
            Season winter = Season.WINTER;
    
            System.out.println(spring);
            System.out.println(summer);
            System.out.println(autumn);
            System.out.println(winter);
        }
    
    }
    
    enum Season {
        SPRING("春天", "温暖"),SUMMER("夏天", "酷热"),//多个枚举需要逗号区分
        AUTUMN("秋天", "凉爽"),WINTER("冬天", "寒冷");
        public String name;
        public String desc;
    
        private Season(String name, String desc) {
            this.name = name;
            this.desc = desc;
    
        }
     
        @Override
        public String toString() {
            return "Season{" +
                    "name='" + name + '\'' +
                    ", desc='" + desc + '\'' +
                    '}';
        }
    
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    细节

    1.枚举类定义 通过 enum 加 名字
    2.多个枚举通过逗号分割

    enum其实是继承自Enum类
    通过javap反编译我们可以进行分析

    在这里插入图片描述

    通过反编译我们可以看到 先是定义了四个枚举类型实例
    并且该Seanson在内部使用final关键字其他类无法继承 Seanson继承自Enum类

    枚举的常见几种方法

    方法名详细描述
    value()传递枚举类型Class对象和枚举常量名称给静态方法valueOf,会得到与参数匹配的枚举常量
    toString得到当前枚举常量的名称.你可以通过重写这个方法来使得到的结果更易读
    equals在枚举类型中可以使用"=="来比较两个枚举常量是否相等.Enum提供的这个equals()方法,也是直接使用"=="实现.它的存在是为了在Set,List和Map中使用.注意:equals()是不可变的
    hashCodeEnum实现了hashCode()来和equals()保持一直.它也是不可变的.
    getDeclaringClass得到枚举常量所属枚举类型的Class对象.可以用它来判断两个枚举常量是否属于同一个枚举类型
    name得到当前枚举常量的名称建议优先使用toString()
    ordinal得到当前枚举常量的次序
    compareTo枚举类型实现了Comparable接口,这样可以比较两个枚举常量的大小(按照声明的顺序排列)
    clone枚举类型不能直接被Clone.为了防止子类实现克隆方法,Enum实现了一个仅抛出CloneNotSupportedException异常的不变Clone().

    常用方法使用

    package code06;
    
    public class EnumClass01 {
        public static void main(String[] args) {
            Season spring = Season.SPRING;
            Season summer = Season.SUMMER;
            Season autumn = Season.AUTUMN;
            Season winter = Season.WINTER;
    
            System.out.println(spring.name());//打印出SPRING
            System.out.println(summer.ordinal());//输出枚举的顺序 从0开始 打印结果为1
            for (Season season:Season.values()){
                //如果你自己看我的反编译文件内容会发现里面有values方法
                System.out.println(season);//增强for循环 遍历枚举信息
    
                /*打印结果
                Season{name='春天', desc='温暖'}
                Season{name='夏天', desc='酷热'}
                Season{name='秋天', desc='凉爽'}
                Season{name='冬天', desc='寒冷'}
                * */
            }
            //也可以使用valueof获取值  前提必须有这个常量否则会报异常
            // 打印结果Season{name='秋天', desc='凉爽'}
            Season autumn1 = Season.valueOf("AUTUMN");
            System.out.println(autumn1);
            //比较两个编号 结果为 -1
            //解析  autumn编号为2 - winter编号3 所以结果为-1
            System.out.println(autumn.compareTo(winter));
        }
    
    }
    
    enum Season {
        SPRING("春天", "温暖"),SUMMER("夏天", "酷热"),
        AUTUMN("秋天", "凉爽"),WINTER("冬天", "寒冷");
        public String name;
        public String desc;
    
        private Season(String name, String desc) {
            this.name = name;
            this.desc = desc;
    
        }
    
        @Override
        public String toString() {
            return "Season{" +
                    "name='" + name + '\'' +
                    ", desc='" + desc + '\'' +
                    '}';
        }
    
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
  • 相关阅读:
    使用ngrok内网穿透后,调用相关接口报ERR_NGROK_6024 异常
    java ssh 二手车交易管理系统eclipse开发mysql数据库MVC模式java编程网页设计
    #机器翻译
    idea怎么快速查看所有断点
    vue:生命周期函数总结
    Android 单一音量控制
    2015款奔驰B200车发动机故障灯异常点亮
    C++ day2
    金融行业数智化供应链管理系统:多维度评估分析供应商,赋能智能金融变革
    分布式 PostgreSQL 集群(Citus)官方示例 - 时间序列数据
  • 原文地址:https://blog.csdn.net/weixin_45185267/article/details/125471936