当前位置: 首页 > article >正文

GOGOGO 枚举

含义:一种类似于类的一种结构

作用:是Java提供的一个数据类型,可以设置值是固定的
【当某一个数据类型受自身限制的时候,使用枚举】

语法格式:

public enum 枚举名{
	……
}

有哪些成员?

A、对象

public enum EnumDemo {
    /**
     * 对象
     *
     * 对象是直接在枚举类中
     * 全大写默认是对象
     * 底层语法格式默认 public static final 枚举名 对象名 = new 枚举名();
     * 默认调用的无参构造
     * 定义多个对象时以逗号隔开分号结尾 对象1,对象2,对象3,对象4……;
     */
    UPPER;
}

如何调用对象

public class EnumDemoTest {
    public static void main(String[] args) {
        //直接打印输出  【枚举名.对象名】   默认打印结果是对象名
        System.out.println(EnumDemo.UPPER);//UPPER
    }
}

注意:这里打印的对象不是地址,默认打印对象名,因为其实它默认重写了toString方法,手动重写会打印对象构造方法中的值

B、字段【非静态和静态】

	前提:从上自下,先有对象,再有字段;有字段无对象会编译错误
public enum EnumDemo {
    /**
     * 字段
     *
     * 1.数据类型  字段名;
     *
     * 2.static 数据类型 字段名;
     */
    UPPER;
    
    String centre;
    static String centre1;
}

如何调用字段

public class EnumDemoTest {
    public static void main(String[] args) {
        //调用非静态字段【枚举名.对象名.非静态字段名】
        EnumDemo.UPPER.centre = "aa";
        System.out.println(EnumDemo.UPPER.centre);//aa

        //调用静态字段【枚举名.静态字段名】
        EnumDemo.centre1 = "AA";
        System.out.println(EnumDemo.centre1);//AA
    }
}

C、构造方法

 	默认都是 私有的
public enum EnumDemo {
    /**
     * 构造方法
     *
     * 1.无参构造
     *
     * 2.有参构造【直接此枚举对象中 对象名("字段类型值")】
     *
     * 对象默认使用无参
     *
     * 当有了有参构造,也必须要有无参构造
     *
     */
    UPPER,UPPER1("!"),UPPER2("!",100);

    String centre;
    static String centre1;
    //默认构造方法被private修饰,也只能用它来修饰
    EnumDemo(){
        System.out.println("无参构造!");
    }
    EnumDemo(String name){
        System.out.println("有参构造"+name);
    }
    EnumDemo(String name,int morey){
        System.out.println("有参构造"+name+"--"+morey);
    }


}

如何调用构造方法

public class EnumDemoTest {
    public static void main(String[] args) {
        //调用无参构造
        EnumDemo upper = EnumDemo.UPPER;//就是这样就会打印:无参构造!

        //调用有参构造(形参列表个数1)
        EnumDemo upper1 = EnumDemo.UPPER;//就是这样就会打印:有参构造!

        //调用有参构造(形参列表个数2……)
        EnumDemo upper2 = EnumDemo.UPPER;//就是这样就会打印:有参构造!--100
        
    }
}

由此可以看出,每个对象都能共享枚举里面的其它成员

这里重写toString方法呢?

public enum EnumDemo {
    /**
     * 构造方法
     *
     * 1.无参构造
     *
     * 2.有参构造【直接此枚举对象中 对象名("字段类型值")】
     *
     * 对象默认使用无参
     *
     * 当有了有参构造,也必须要有无参构造
     *
     */
    UPPER,UPPER1("!"),UPPER2("!",100);

    String name;
    int morey;
    static String centre1;
    //默认构造方法被private修饰,也只能用它来修饰
    EnumDemo(){
        System.out.println("无参构造!");
    }
    EnumDemo(String name){
        System.out.println("有参构造"+name);
    }
    EnumDemo(String name,int morey){//给set/get方法、toString方法
        this.name = name;
        this.morey = morey;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getMorey() {
        return morey;
    }

    public void setMorey(int morey) {
        this.morey = morey;
    }

    public static String getCentre1() {
        return centre1;
    }

    public static void setCentre1(String centre1) {
        EnumDemo.centre1 = centre1;
    }

    @Override
    public String toString() {
        return "EnumDemo{" +
                "name='" + name + '\'' +
                ", morey=" + morey +
                '}';
    }
}
/**
 * 调用 UPPER2对象 有参构造
 */
public class EnumDemoTest {
    public static void main(String[] args) {
        //调用无参构造
        EnumDemo upper = EnumDemo.UPPER;//就是这样就会打印:无参构造!

        //调用有参构造(形参列表个数1)
        EnumDemo upper1 = EnumDemo.UPPER;//就是这样就会打印:有参构造!

        //调用有参构造(形参列表个数2……)
        EnumDemo upper2 = EnumDemo.UPPER2;
        System.out.println(upper2);//EnumDemo{name='!', morey=100}

    }
}

D、方法

public enum EnumDemo {
    /**
     * 方法
     *
     * 1.非静态方法
     *
     * 2.静态方法
     */
    UPPER;
    void method1(){
        System.out.println("非静态方法!");
    }
    static void method2(){
        System.out.println("静态方法!");
    }
}

如何调用方法

public class EnumDemoTest {
    public static void main(String[] args) {
        //调用非静态方法【对象名.对象名.非静态方法】
        EnumDemo.UPPER.method1();//非静态方法!

        //调用静态方法【枚举名.静态方法名】
        EnumDemo.method2();//静态方法!

    }
}

枚举的继承

(Enum)是所有枚举类的基类,都隐式继承了Enum,只能隐式继承,不能显示继承

在这里插入图片描述

为何打印对象的时候不是直接打印的地址而是打印的对象名?

java.lang.Object		【所有类的基类,toString方法】

  └ java.lang.Enum<E>	【所有枚举类的基类】
  						【因为Enum继承了Object类,重写了toString方法】
  	└ 自定义的枚举类		【所以打印对象是其对象名,而不是地址】

使用场景

一般使用在值比较固定的地方,常和switch一起使用

在这里插入图片描述


http://www.kler.cn/a/522547.html

相关文章:

  • QT 通过ODBC连接数据库的好方法:
  • deepseek-r1 本地部署
  • Tensor 基本操作2 理解 tensor.max 操作,沿着给定的 dim 是什么意思 | PyTorch 深度学习实战
  • 使用numpy自定义数据集 使用tensorflow框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预
  • Pandas DataFrame 拼接、合并和关联
  • 实现B-树
  • OpenCV:在图像中添加噪声(瑞利、伽马、脉冲、泊松)
  • Java并发学习:进程与线程的区别
  • zyNo.16(笔记web题型)
  • Java进阶(二):Java设计模式
  • 数据结构 栈
  • qt-QtQuick笔记之常见项目类简要介绍
  • 构建一个时间序列分析模型,用于股票市场预测
  • Python 数据清洗与处理常用方法全解析
  • MFC设置透明但不穿透窗体
  • 2023CISCN初赛unzip
  • 【kong gateway】5分钟快速上手kong gateway
  • 【数据结构】_链表经典算法OJ:环形链表的约瑟夫问题
  • 基于 Android 的日程管理系统的设计与实现
  • 状态码对照表
  • 蓝桥杯准备 【入门2】分支结构
  • STM32 EXTI中断配置
  • Lite.Ai.ToolKit - 一个轻量级的 C++ 工具包
  • labelimg闪退的解决办法
  • leetcode 2105. 给植物浇水 II
  • 【QT】- QUdpSocket