理解java枚举类(enum)

理解

  1. 我们定义的枚举类时候定义enum类型实际上是个class,反编译会生成final class xxx extends Enum{}。生成转化的过程是编译时候jdk帮我们完成的工作。
  2. 枚举类的实例信息在初始化时候就已经决定了。采用了静态代码块形式初始化。
  3. 枚举的类不能被继承。class被finanl修饰。
  4. 枚举的构造器没有修饰。因为class会被添加上private修饰。

流程(以mac为例子)

  1. https://varaneckas.com/jad/ 下载反编译工具
    jad下载
  2. 配置环境变量将下载的后解压目录放到环境变量path里面
    添加环境变量
  3. 跳转到我们的生成的class目录里面
    在这里插入图片描述
  4. 点击查看生生的xxx.jad(也可以直接在idea里面直接打开这个xx.jad文件w’q)
    在这里插入图片描述

一个普通的枚举

package creational.singleton;

public enum EnumSingleton {

    FIRSET("1","第一个"),SECEND("2","第二个");

    private String value;
    private String desc;


    EnumSingleton(String value, String desc ){
        this.value =value;
        this.desc = desc;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }
}

jad解析class生成的 xxx.jad

// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   EnumSingleton.java

package creational.singleton;


public final class EnumSingleton extends Enum
{

    public static EnumSingleton[] values()
    {
        return (EnumSingleton[])$VALUES.clone();
    }

    public static EnumSingleton valueOf(String name)
    {
        return (EnumSingleton)Enum.valueOf(creational/singleton/EnumSingleton, name);
    }

    private EnumSingleton(String s, int i, String value, String desc)
    {
        super(s, i);
        this.value = value;
        this.desc = desc;
    }

    public String getValue()
    {
        return value;
    }

    public void setValue(String value)
    {
        this.value = value;
    }

    public String getDesc()
    {
        return desc;
    }

    public void setDesc(String desc)
    {
        this.desc = desc;
    }

    public static final EnumSingleton FIRSET;
    public static final EnumSingleton SECEND;
    private String value;
    private String desc;
    private static final EnumSingleton $VALUES[];

    static 
    {
        FIRSET = new EnumSingleton("FIRSET", 0, "1", "\u7B2C\u4E00\u4E2A");
        SECEND = new EnumSingleton("SECEND", 1, "2", "\u7B2C\u4E8C\u4E2A");
        $VALUES = (new EnumSingleton[] {
            FIRSET, SECEND
        });
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值