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一起使用

相关推荐
倔强的小石头_5 分钟前
【C语言指南】函数指针深度解析
java·c语言·算法
kangkang-4 小时前
PC端基于SpringBoot架构控制无人机(三):系统架构设计
java·架构·无人机
界面开发小八哥5 小时前
「Java EE开发指南」如何用MyEclipse创建一个WEB项目?(三)
java·ide·java-ee·myeclipse
idolyXyz6 小时前
[java: Cleaner]-一文述之
java
一碗谦谦粉6 小时前
Maven 依赖调解的两大原则
java·maven
netyeaxi7 小时前
Java:使用spring-boot + mybatis如何打印SQL日志?
java·spring·mybatis
收破烂的小熊猫~7 小时前
《Java修仙传:从凡胎到码帝》第四章:设计模式破万法
java·开发语言·设计模式
猴哥源码7 小时前
基于Java+SpringBoot的动物领养平台
java·spring boot
老任与码7 小时前
Spring AI Alibaba(1)——基本使用
java·人工智能·后端·springaialibaba
小兵张健7 小时前
武汉拿下 23k offer 经历
java·面试·ai编程