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

相关推荐
野犬寒鸦25 分钟前
MySQL索引使用规则详解:从设计到优化的完整指南
java·数据库·后端·sql·mysql
思考的橙子31 分钟前
Springboot之会话技术
java·spring boot·后端
钰爱&1 小时前
【Linux】POSIX 线程信号量与互斥锁▲
java·开发语言·jvm
黑匣子~2 小时前
java集成telegram机器人
java·python·机器人·telegram
竹小春逢十八3 小时前
Java常用类概述
java
weixin_437398213 小时前
RabbitMQ深入学习
java·分布式·后端·spring·spring cloud·微服务·rabbitmq
Your易元4 小时前
设计模式-迭代器模式
java·开发语言
╭⌒心岛初晴4 小时前
JAVA练习题(2) 找素数
java·开发语言·算法·java练习题·判断素数/质数
purrrew4 小时前
【Java ee初阶】网络原理
java·运维·服务器·网络·网络协议·udp·java-ee
Timmer丿4 小时前
kafka学习笔记(四、生产者、消费者(客户端)深入研究(三)——事务详解及代码实例)
java·笔记·学习·kafka