• 浅学枚举类


    早期

    早期代码中,直接使用简单的静态常量来表示枚举,例如下面的代码:

    public static final int SEASON_SPRING = 1;
    public static final int SEASON_SUMMER = 2;
    public static final int SEASON_FALL = 3;
    public static final int SEASON_WINTER = 4	;
    
    • 1
    • 2
    • 3
    • 4

    缺点

    • 不安全,可以使用季节常量计算进行加减运算
    • 没有命名空间,使用季节时,必须在SPRINF加上SEASON前缀,不然容易与其他类的静态常量混淆
    • 意义不明确,输出SEASON_SPRING时得到的却是1,不知其意

    枚举类

    Java5时新增了enum关键字与class,interface关键字的地位相同,枚举类是一个特殊的类,

    它一样可以拥有自己的成员变量,方法,可以实现一个或者多个接口,也可以定义自己的构造器。

    枚举类与普通类的区别

    • 枚举类可以实现一个或者多个接口,使用enum定义的枚举类默认继承java.lang.Enum类,而不是默认

    • 继承Objec类。其中,java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口

    • 使用enum定义的非抽象枚举类类默认被final修饰,因此不能派生出子类。

    • 枚举构造器默认被private修饰,也只能被private修饰

    • 枚举类的所有实例必须在枚举类的第一行列出,否则这个枚举不能产生实例,列出实例时,系统会自动添加public static final 修饰。

    定义一个枚举类
    public enum SeasonEnum {
        SPRING,
        SUMMER,
        FALL,
        WINTER
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    枚举类测试

        public void judge(SeasonEnum s){
            switch (s){
                case SPRING:
                    System.out.println("春天");
                    break;
                case SUMMER:
                    System.out.println("夏天");
                    break;
                case FALL:
                    System.out.println("秋天");
                    break;
                case WINTER:
                    System.out.println("冬天");
                    break;
            }
        }
        @Test
        public void testEnum(){
            //values()枚举类默认方法,返回该枚举类所有实例
            for (SeasonEnum e: SeasonEnum.values()){
                //打印 枚举实例.toSting() :"SPRING","SUMMER","FALL","WINTER"
                System.out.println(e);
            }
    
            this.judge(SeasonEnum.SUMMER);//"夏天"
        }
    
    
    • 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

    java,lang.Enum的方法

    • intcompareTo(E o),指定枚举对象比较顺序,必须是同一个枚举类,如果枚举对象位于指定枚举对象之后,则返回正整数,如果该枚举对象位于指定枚举对象之前,则返回负数,否则返回0
    • String name(): 返回枚举类实例的名称,优先考虑toString(),可读性比较高
    • int irdinal(): 返回枚举值在枚举类中的索引值
    • String toString(): 返回枚举常量名称,与namw方法相似,但toString()方法更加常用
    • public static <T extends Enum> T valueOf(Class enumType,String),这一个静态方法,返回指定枚举类中指定名称的枚举值,name必须是枚举类的值,不允许是额外的空白字符串。
    public enum Gender {
        MALE,
        FEMALE;
        public String name;//成员变量
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    测试类

        @Test
        public void test234(){
            Gender female = Enum.valueOf(Gender.class, "FEMALE");
            System.out.println(female);//"FEMALE"
            System.out.println(female.name);//null
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    带参构造器枚举类

    上面例子中枚举类的成员变量值不应该可以赋值,定义为不允许修改

    public enum Gender {
        //此处的枚举值通过调用对应的构造器进行赋值
        MALE("男"),
        FEMALE("女");
        public String name;//成员变量
    
        private Gender(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    测试

        @Test
        public void test2341(){
            Gender female = Gender.FEMALE;
            System.out.println(female);//"FEMALE"
            System.out.println(female.name);//"女"
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    包含抽象方法枚举类

    
    
    • 1

    感谢观看,每天进步一点点

  • 相关阅读:
    iPhone 15 换 USB-C 或藏“心机”,爆料者:只有 Pro 版提速,其他限速 USB 2.0
    React_Fragments
    【ybtoj】二分算法例题
    Go开发IDE全览:GoLand vs VSCode全面解析
    SSM流浪动物救助系统毕业设计-附源码191631
    后端面经学习自测(三)
    树的基本术语
    springmvc 获取项目中的所有请求路径
    C语言进程的相关操作
    【IC5000教程】-01-使用daqIDEA图形化debug调试C代码
  • 原文地址:https://blog.csdn.net/weixin_46579624/article/details/125567109