枚举类

简介: 枚举类的引入问题:一些方法在运行时,它需要的数据类型不能是任意的,而必须是一定范围内的值解决方案:自定义一个类,限制别人随意创建对象代码如下:/* * 问题: * 一些方法在运行时,它需要的数据类型不能是任意的,而必...

枚举类的引入

问题:
一些方法在运行时,它需要的数据类型不能是任意的,而必须是一定范围内的值
解决方案:
自定义一个类,限制别人随意创建对象

  • 代码如下:

/*
 * 问题:
 *      一些方法在运行时,它需要的数据类型不能是任意的,而必须是一定范围内的值
 * 解决方案:
 *      自定义一个类,限制别人随意创建对象
 * 代码如下:
 */


/*
 自定义一个性别类,限制着别人任意创建该类的对象
 */

class Gender{
    String value;   //存储性别
    
    //对外提供本类的对象
    public static final Gender man = new Gender("男");
    
    public static final Gender woman = new Gender("女");
    
    //私有化Gender类,使外部不能直接创建该类对象
    private Gender(String value){
        this.value = value;
    }
}

class Person{
    String name;
    Gender sex;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Gender getSex() {
        return sex;
    }
    public void setSex(Gender sex){
        this.sex = sex;
    }
    
    @Override
    public String toString() {
        return "姓名:"+this.name +",性别:"+this.sex.value;
    }
    
    
}

public class Demo3 {

    public static void main(String[] args) {
        Person p = new Person();
        p.name = "狗娃";
        p.setSex(Gender.man);
        System.out.println(p);
    }
}

枚举

  • 枚举类的应用场景:

一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,这时我们就可以是使用枚举类型进行限制

  • 例如:

一年四季、方向、性别

  • 格式:
    enum 类名{
    
    }
  • 注意的事项:
    1. 枚举类也是类,只不过是一个特殊的类
    2. 枚举值默认的修饰符是:public static final
    3. 枚举值其实就是当前枚举类的类型
    4. 枚举值必须是枚举类中的第一个语句
    5. 枚举类的构造方法默认是private,修饰符也 必须是private
    6. 枚举类允许出现抽象的方法,但是一旦出现了抽象的方法,那么枚举值就必须实现抽象的方法
  • 例如:
//定义一个方向
enum Direction{
    UP("上"),DOWN("下"),LEFT("左"),RIGHT("右");     //枚举值
    String value;           //定义一个成员变量
    public void print(){    //定义一个方法
        System.out.println("value:"+value);
    }
    private Direction(String value){
        this.value = value;
    }
}
public class Enum {
    public static void main(String[] args) {
        Direction.UP.print();
    }
}

使用枚举类解决最开始的问题:

//性别的枚举类
enum Gender1{
    
    MAN("男"),WOMAN("女");    
    
    String value;
    
    private Gender1(String value){
        this.value = value;
    }
}
class Person1{
    String name;
    private Gender1 sex;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Gender1 getSex() {
        return sex;
    }
    public void setSex(Gender1 sex) {
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "姓名:"+this.name+",性别:"+this.sex.value;
    }
    
}
public class Demo4 {
    public static void main(String[] args) {
        Person1 p = new Person1();
        p.name = "张三";
        p.setSex(Gender1.MAN);
        System.out.println(p);
    }
}

相关文章
|
11天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1244 5
|
10天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1234 87
|
11天前
|
云栖大会
阿里云云栖大会2025年9月24日开启,免费申请大会门票,速度领取~
2025云栖大会将于9月24-26日举行,官网免费预约畅享票,审核后短信通知,持证件入场
1806 13
|
20天前
|
人工智能 运维 安全
|
4天前
|
资源调度
除了nrm-pm,还有哪些工具可以管理多个包管理器的源?
除了nrm-pm,还有哪些工具可以管理多个包管理器的源?
236 127
|
4天前
|
前端开发
Promise的then方法返回的新Promise对象有什么特点?
Promise的then方法返回的新Promise对象有什么特点?
182 2