java enum类(枚举类)

先给出一段代码:
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>

这个带有颜色的静态块是不是说明了一切?看到了这,程序的运行结果显然木有问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值