java中Enum枚举的底层

我们都知道,Enum特性是jdk5引入的,表面上和类、接口属于同一层次,那么我们反编译class文件会出现什么呢?

首先,我写了一个简单的Enum,如下所示:

public enum Sex {
    MALE("男"),FEMALE("女");

    private String desc;

    Sex(String desc) {
        this.desc = desc;
    }
}
  1. 编译:javac Sex.java
  1. jad工具反编译:jad Sex.class

结果如下所示:

public final class Sex extends Enum
{

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

    public static Sex valueOf(String s)
    {
        return (Sex)Enum.valueOf(com/zpengc/lang/Sex, s);
    }

    private Sex(String s, int i, String s1)
    {
        super(s, i);
        desc = s1;
    }

    public static final Sex MALE;
    public static final Sex FEMALE;
    private String desc;
    private static final Sex $VALUES[];

    static 
    {
        MALE = new Sex("MALE", 0, "\u7537");
        FEMALE = new Sex("FEMALE", 1, "\u5973");
        $VALUES = (new Sex[] {
            MALE, FEMALE
        });
    }
}

注意:

1.枚举Sex就是一个继承了Enum的普通类

2.类中添加了valueof、values方法

3.定义的MALEFEMALE对象在编辑阶段就被创建了并且被存储在数组

猜你喜欢

转载自www.cnblogs.com/codezpc/p/12739924.html