在java中 , 枚举实际上是一个特殊的类

public enum TestEnum {
    VAL1,
    VAL2;

    public static void main(String[] args) {
        System.out.println(TestEnum.VAL1);
    }
}

编译后内部实现的方式

//继承java.lang.Enum并声明为final
public final class TestEnum extends Enum {
    /* 枚举类型的常量 */
    public static final TestEnum VAL1;
    public static final TestEnum VAL2;
    private static final TestEnum[] $VALUES;//values使用数组存储

    private TestEnum (String name, int ordinal){//私有的构造器, 外部无法实例化
        super(name, ordinal);
    }

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

    public static TestEnum valueOf(String name) {
        return (TestEnum)Enum.valueOf(TestEnum , name);
    }

    static {
        VAL1= new TestEnum(\"VAL1\", 0);
        VAL2= new TestEnum(\"VAL2\", 1);
        $VALUES = (new TestEnum[] {VAL1, VAL2});
    }
}

 

收藏 打印