先给出一段代码:
这个带有颜色的静态块是不是说明了一切?看到了这,程序的运行结果显然木有问题。
public enum EnumTest {
FRANK("The given name of me"),
LIU("The family name of me");
private String context;
private String getContext(){
return this.context;
}
private EnumTest(String context){
this.context = context;
}
public static void main(String[] args){
for(EnumTest name :EnumTest.values()){
System.out.println(name+" : "+name.getContext());
}
System.out.println(EnumTest.FRANK.getDeclaringClass());
}
}
下面还是先给出我对这段代码的理解:
1:必须要说一下枚举的意思,注意一定要是同一类型的数据,不允许重复,可以理解成带有某种泛型的Set,存有某种特定类型,还不允许在集合中放入重复值
2:那上面的代码来说,我枚举的类型不允许出现这种情况
FRANK("The given name of me","aaaaa"),
LIU("The family name of me");
这样就属于两种枚举类型了,编译器会提示错误信息了
接着往下看,猜到程序运行的结果了吗?
FRANK : The given name of me
LIU : The family name of me
class EnumTest
我当初看到这段代码的时候很纠结,for的遍历循环的name.getContext()是怎么取得枚举类型括号里面的内容的,不知道你们有没有此疑问,来说明下吧
当我们在Eclipse中编写代码的时候,把那个枚举类型的构造函数去掉的时候编译器就会提示错误信息:“没有带有String参数的构造函数”;
也就是说我们在编写这种枚举常量的时候要有相应的构造函数,这样对name.getContext();是否知道一点点,还不是很透彻,来看一下反编译后的程序代码吧:
public final class EnumTest extends Enum
{
public static final EnumTest FRANK;
public static final EnumTest LIU;
private String context;
private static final EnumTest $VALUES[];
public static EnumTest[] values()
{
return (EnumTest[])$VALUES.clone();
}
public static EnumTest valueOf(String s)
{
return (EnumTest)Enum.valueOf(EnumTest, s);
}
private String getContext()
{
return context;
}
private EnumTest(String s, int i, String s1)
{
super(s, i);
context = s1;
}
public static void main(String args[])
{
EnumTest aenumtest[] = values();
int i = aenumtest.length;
for (int j = 0; j < i; j++)
{
EnumTest enumtest = aenumtest[j];
System.out.println((new StringBuilder()).append(enumtest).append(" : ").append(enumtest.getContext()).toString());
}
System.out.println(FRANK.getDeclaringClass());
}
static
{
FRANK = new EnumTest("FRANK", 0, "The given name of me");
LIU = new EnumTest("LIU", 1, "The family name of me");
$VALUES = (new EnumTest[] {
FRANK, LIU
});
}
}</span>
这个带有颜色的静态块是不是说明了一切?看到了这,程序的运行结果显然木有问题。