JavaSE学习之枚举

Posted yfyyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE学习之枚举相关的知识,希望对你有一定的参考价值。

Java SE 枚举类

枚举类介绍

类的对象只有有限个、确定的。我们称此类为枚举类

  • 线程状态:创建、就绪、运行、堵塞、死亡

当需要定义一组常量时,强烈建议使用枚举类

如果枚举类中只有一个对象,则可以作为单例模式的实现方式

枚举类的实现

  • JDK1.5 之前需要自定义枚举类

    package cn.imut.test;
    
    //自定义枚举类
    public class Season {
        //1.声明Season的属性
        private final String seasonName;      //名称
        private final String seasonDesc;      //描述
    
        //2.私有化类的构造器,并给对象属性赋值
        private Season(String seasonName, String seasonDesc) {
            this.seasonName = seasonName;
            this.seasonDesc = seasonDesc;
        }
    
        //3.提供当前枚举类的多个对象
        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("冬天","冰天雪地");
    
        //4.其他述求1:获取枚举类对象的属性
        public String getSeasonName() {
            return seasonName;
        }
    
        public String getSeasonDesc() {
            return seasonDesc;
        }
    
        //4.其他述求2:提供toString()
        @Override
        public String toString() {
            return "Season{" +
                    "seasonName='" + seasonName + ''' +
                    ", seasonDesc='" + seasonDesc + ''' +
                    '}';
        }
    }

    测试

    package cn.imut.test;
    
    public class SeasonTest {
        public static void main(String[] args) {
            Season summer = Season.SUMMER;
            System.out.println(summer);
        }
    }
  • JDK1.5 新增的 enum关键字用于定义枚举类

    package cn.imut.test;
    
    //使用enum关键字定义枚举类
    //说明:定义的枚举类默认继承于java.lang.Enum类
    public enum Season1 {
    
        //1.提供当前枚举类的对象,多个对象之间用逗号隔开,末尾对象分号结束
        SPRING("春天","春暖花开"),
        SUMMER("夏天","夏日炎炎"),
        AUTUMN("秋天","秋高气爽"),
        WINTER("冬天","冰天雪地");
    
        //2.声明Season的属性
        private final String seasonName;      //名称
        private final String seasonDesc;      //描述
    
        //3.私有化类的构造器,并给对象属性赋值
        private Season1(String seasonName, String seasonDesc) {
            this.seasonName = seasonName;
            this.seasonDesc = seasonDesc;
        }
    
        //4.其他述求1:获取枚举类对象的属性
        public String getSeasonName() {
            return seasonName;
        }
    
        public String getSeasonDesc() {
            return seasonDesc;
        }
    }
    

若枚举类只有一个对象,则可以作为一种单例模式的实现方式

Enum类的主要方法

技术图片

常用

  • values()
  • valueOf(String str)
  • toString()

枚举类的属性

  • 枚举类对象的属性不应允许被改动,所以应该使用 private final 修饰
  • 枚举类使用 private final 修饰的属性应该在构造器中为其赋值
  • 若枚举类显式的定义了带参数的构造器,则在列出枚举值时也必须对应的传入参数

使用enum关键字定义的枚举类实现接口的情况

  • 情况一、实现接口,在enum类中实现抽象方法

  • 情况二

    public enum Season1 implements Info{
    
        //1.提供当前枚举类的对象,多个对象之间用逗号隔开,末尾对象分号结束
        SPRING("春天","春暖花开") {
            public void show() {
                System.out.println("春天在哪里");
            }
        },
        SUMMER("夏天","夏日炎炎") {
            public void show() {
                System.out.println("夏天在哪里");
            }
        },
        AUTUMN("秋天","秋高气爽") {
            public void show() {
                System.out.println("秋天在哪里");
            }
        },
        WINTER("冬天","冰天雪地") {
            public void show() {
                System.out.println("冬天在哪里");
            }
        };

以上是关于JavaSE学习之枚举的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE学习之反射

Kotlin学习之枚举类

Kotlin学习之枚举类

Swift学习之位移枚举的按位或运算

iOS学习之代码块(Block)

GoLang学习之变量定义和初始化