枚举类

简介: java枚举类

一 场景

当需要表示几个固定值的时候,可以使用枚举来限制。如:星期、季节、成绩等级等等;所以一般枚举类对应的是项目里的字典表;

枚举类本质就是一个特殊的类,继承enum类,所以自定义的枚举类不可以再继承其他类了,但是可以实现其他接口;

枚举元素

枚举类里列出的类型叫做枚举元素,如季节的枚举元是春夏秋冬,成绩等级的枚举元素是ABCD四个等级.....

二 案例

这里以成绩等级作为案例,假设总共分为ABCD四个等级

2.1 验证枚举类的父类

自定义枚举类如下

public enum ScoreLevelEnum {
   
   

}

测试类

public class ScoreInput {
   
   
    public static void main(String[] args) {
   
   
        //枚举类父类
        System.out.println(ScoreLevelEnum.class.getSuperclass());
    }
}

结果
image.png

由于自定义的枚举类已经继承enum类,所以自定义的枚举类不可以再继承其他类了,但是可以实现其他接口;

2.2 枚举类只有一个枚举元素的情况

此时的枚举类是单例的设计模式(单例:懒汉式、饿汉式、枚举)

2.3 默认构造器都是私有的

测试类

直接报错
image.png

由于枚举类构造器是私有的,所以不能被继承,即不可以有子类,因为子类实例化的时候需要先调父类的构造器;

2.4 可以定义普通方法

静态、非静态方法都可以

非静态方法

枚举类

public enum ScoreLevel {
   
   
    A,B,C,D;
   public void printLevel(){
   
   
       //this:当前对像(谁调用这个方法,this就是谁)
       System.out.println(this);
   }
}

测试

public class ScoreInput {
   
   
    public static void main(String[] args) {
   
   
        ScoreLevel.A.printLevel();
    }
}

结果
image.png

静态方法

枚举类

在这里插入代码片

2.5 可以定义抽象方法

枚举类

package com.maltose.demo.test;

public enum ScoreLevel {
   
   
    A{
   
   
        @Override
        public void say() {
   
   
            System.out.println("A等级");
        }
    }

    ,B {
   
   
        @Override
        public void say() {
   
   
            System.out.println("B等级");
        }
    },
    C {
   
   
        @Override
        public void say() {
   
   
            System.out.println("C等级");
        }
    },
    D {
   
   
        @Override
        public void say() {
   
   
            System.out.println("D等级");
        }
    };

  public abstract void say();
}

2.6 常用方法

枚举类

package com.maltose.demo.test;

public enum ScoreLevel {
   
   
    A{
   
   
        @Override
        public void say() {
   
   
            System.out.println("A等级");
        }
    }

    ,B {
   
   
        @Override
        public void say() {
   
   
            System.out.println("B等级");
        }
    },
    C {
   
   
        @Override
        public void say() {
   
   
            System.out.println("C等级");
        }
    },
    D {
   
   
        @Override
        public void say() {
   
   
            System.out.println("D等级");
        }
    };

  public abstract void say();
}

测试类1

public class ScoreInput {
   
   
    public static void main(String[] args) {
   
   
        ScoreLevel[] values = ScoreLevel.values();
        for (int i = 0; i < values.length; i++) {
   
   
            System.out.println(values[i].name()+": "+values[i].ordinal());
        }
    }
}

结果
image.png

测试类2

public class ScoreInput {
   
   
    public static void main(String[] args) {
   
   
        //把字符串"A"变为枚举元素
        ScoreLevel scoreLevel = ScoreLevel.valueOf("A");
        System.out.println(scoreLevel.name());
        scoreLevel.say();
    }
}

结果
image.png

三 枚举的另一种用法

在第二章里,每个枚举元素都是一个固定值,而在字典表里,一般都是两个值互相对应的,比如YES对应数字1,NO对应数字0

枚举类

package com.maltose.demo.test;

public enum ScoreLevel {
   
   
    YES("1"),
    NO("0");

    private String code;

    ScoreLevel(String code) {
   
   
        this.code = code;
    }

    public String getCode() {
   
   
        return code;
    }

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

测试

package com.maltose.demo.test;

public class ScoreInput {
   
   
    public static void main(String[] args) {
   
   
        System.out.println(ScoreLevel.YES.getCode());
        System.out.println(ScoreLevel.NO.getCode());
    }
}

结果
image.png

相关文章
|
Web App开发 自然语言处理 监控
基于 WebAssembly 的AIoT应用框架实践
天猫精灵大前端团队基于 WebAssembly 的AIoT应用框架实践分享。
基于 WebAssembly 的AIoT应用框架实践
|
存储 分布式计算 安全
阿里云服务器经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i实例介绍与选择参考
在阿里云现在的活动中,可选的云服务器实例规格主要有经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i实例,虽然阿里云在活动中提供了多种不同规格的云服务器实例,以满足不同用户和应用场景的需求。但是有的用户并不清楚他们的性能如何,应该如何选择。本文将详细介绍阿里云服务器中的经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i实例的性能、适用场景及选择参考,帮助用户根据自身需求做出合适的选择。
|
前端开发 JavaScript Java
SpringBoot+JQuery+Ajax实现表单数据传输和单文件或多文件的上传
关于如何在SpringBoot项目中结合JQuery和Ajax实现表单数据的传输以及单文件或多文件上传的教程。文章提供了完整的前后端示例代码,包括项目的`pom.xml`依赖配置、SpringBoot的启动类`App.java`、静态资源配置`ResourceConfig.java`、配置文件`application.yml`、前端HTML页面(单文件上传和多文件上传加表单内容)以及后端控制器`UserController.java`。文章最后展示了运行结果的截图。
802 0
SpringBoot+JQuery+Ajax实现表单数据传输和单文件或多文件的上传
|
算法 Java
垃圾回收机制
垃圾回收是自动内存管理机制,用于检测和回收不再使用的内存资源,防止泄漏和浪费。主要算法包括:标记-清除、引用计数(难以处理循环引用)、分代回收(基于对象生命周期)、增量回收(减少应用停顿时间)和并发回收(同时执行回收和应用)。不同语言和环境选择不同策略,垃圾回收性能直接影响程序内存管理和执行效率。
|
弹性计算 运维 监控
多云基础设施的统一纳管与运维实践分享
阿里云弹性计算团队十三位产品专家和技术专家共同分享云上运维深度实践,详细阐述如何利用CloudOps工具实现运维提效、弹性降本。
937 1
|
存储 安全 程序员
老程序员分享:List、Map、Set之间的联系与区别:
老程序员分享:List、Map、Set之间的联系与区别:
|
数据采集 物联网 大数据
阿里云在ECOC2023会议上发表多个报告和论文
阿里云在ECOC2023会议上发表多个报告和论文
|
虚拟化
使用VMware Workstation安装FusionCompute CNA和VRM
使用VMware Workstation安装FusionCompute CNA和VRM
786 0
使用VMware Workstation安装FusionCompute CNA和VRM
|
Java 容器
servlet的执行过程
servlet的执行过程
189 1
servlet的执行过程

热门文章

最新文章