| 首先,我举个例子,做个试验来共同探讨。看下面的代码: 1、我先定义一个枚举Size将这段代码保存为Size.java文件
 2、接着编译这段代码生成Size.class文件
 3、接着使用java反编译工具jad.exe文件反编译Size.class文件,生成Size.jad文件
 4、用记事本打开Size.jad文件,以下是Size.jad文件的内容:
 5、从以上例子我们可以看出,java实际上底层使用了类来实现枚举复制代码
// 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:   Enum.java
final class Size extends Enum//发现Size居然继承了Enum类,并且修饰符是final
{
    public static Size[] values()//Size居然有方法
    {
        return (Size[])$VALUES.clone();
    }
    public static Size valueOf(String s)//查阅API可知该方法覆盖了Enum类的方法
    {
        return (Size)Enum.valueOf(Size, s);
    }
    private Size(String s, int i)//Size居然有构造函数,调用了超类构造函数
    {
        super(s, i);
    }
    public static final Size A;//原来里面的枚举变量也属于Size类型,怪不得可以使用Size s = Size.A;
    public static final Size B;
    public static final Size C;
    private static final Size $VALUES[];//也生成了这个东西
    static //在static初始化块中给枚举变量赋值,调用了构造方法
    {
        A = new Size("A", 0);
        B = new Size("B", 1);
        C = new Size("C", 2);
        $VALUES = (new Size[] {
            A, B, C
        });
    }
}
6、以下是《java核心技术》中的讲解
 A、所有的枚举类型都是java.lang.Enum类的子类
 B、比较两个枚举类型值时不需要用equals(),用"=="就可以了
 C、在JDK5中可以像下面这样使用枚举
 7、根据以上回答,我很想知道jdk7以前的switch语句能不能判断一个内部值是String的枚举变量?求验证?复制代码enum Size{
        SMALL("S"),MEDIUM("M"),LARGE("L");
        Size(String str)//
        {
                this.str=str;
        }
        private String str;
}
 |