GOGOGO 枚举

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

作用:是Java提供的一个数据类型,可以设置值是固定的

【当某一个数据类型受自身限制的时候,使用枚举】

语法格式:

java 复制代码
public enum 枚举名{
	......
}

有哪些成员?

A、对象

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

如何调用对象?

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

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

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

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

如何调用字段?

java 复制代码
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、构造方法

复制代码
 	默认都是 私有的
java 复制代码
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);
    }


}

如何调用构造方法?

java 复制代码
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方法呢?

java 复制代码
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 +
                '}';
    }
}
java 复制代码
/**
 * 调用 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、方法

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

如何调用方法?

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

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

    }
}

枚举的继承

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

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

java 复制代码
java.lang.Object		【所有类的基类,toString方法】

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

使用场景

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

相关推荐
\光辉岁月/26 分钟前
5.java-数组
java·开发语言
谢亮_vipxieliang43 分钟前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
郑州光合科技余经理1 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
2601_962071571 小时前
类变量和全局变量的生命周期有什么区别?
java·开发语言·jvm
code2cat1 小时前
Java进阶篇之AtomicReference:一次替换引用,读到一份完整状态
java·并发编程·不可变对象·atomicreference
专业程序开发源1 小时前
springboot简历管理系统81389-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
Wang's Blog1 小时前
Java 项目实战: 外卖平台优化-前后端分离开发模式与工程拆分
java·开发语言
HEJOO92 小时前
指针的算术运算详解
java·数据结构·算法
sunshine22 girl2 小时前
Java学习六 Java常见API-2--String-3-字符串的截取替换和其他方法
java·开发语言·学习
EatFan3 小时前
从“框架混战“到“运行时收敛“:2026 年 AI Agent 开发框架的三条路线之争
java·数据库·人工智能·多智能体·ai agent·mcp·agent 框架