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

相关推荐
恋猫de小郭35 分钟前
Flutter 新春第一弹,Dart 宏功能推进暂停,后续专注定制数据处理支持
android·java·flutter
vibag36 分钟前
Kubernetes(一)
java·云原生·容器·kubernetes
ChinaRainbowSea5 小时前
四.4 Redis 五大数据类型/结构的详细说明/详细使用( zset 有序集合数据类型详解和使用)
java·javascript·数据库·redis·后端·nosql
苏-言6 小时前
SSM框架探秘:Spring 整合 Mybatis 框架
java·spring·mybatis
qq_447663057 小时前
java-----多线程
java·开发语言
a辰龙a7 小时前
【Java报错解决】警告: 源发行版 11 需要目标发行版 11
java·开发语言
听海边涛声7 小时前
JDK长期支持版本(LTS)
java·开发语言
IpdataCloud7 小时前
Java 获取本机 IP 地址的方法
java·开发语言·tcp/ip
MyMyMing7 小时前
Java的输入和输出
java·开发语言
忆~遂愿7 小时前
3大关键点教你用Java和Spring Boot快速构建微服务架构:从零开发到高效服务注册与发现的逆袭之路
java·人工智能·spring boot·深度学习·机器学习·spring cloud·eureka