Enum的深入浅出

 

   还记得上一篇是如何运用Enum来定义一周的的吗?

 

public enum Weekday {
	monday,tuesday,wensday,thursday,friday,saturday,sunday
}

 

   显然,enum很像特殊的class,为了一探究竟,需要来看一下Weekday.java文件的字节码:

 


Enum的深入浅出_第1张图片
 

 

通过javap命令,查看字节码得知,实际上enum声明定义的Weekday就是一个类,该类继承(extends )自 java.lang.Enum类。

查看java api文档,其中对java.lang.Enum类的介绍非常简单明了,它就是所有 Java 语言枚举类型的公共基本类。

再来看看我们通常通过变量来实现Weekday的代码:

 

public static final String monday = "1";
public static final String tuesday = "2";
public static final String wensday = "3";
public static final String thursday = "4";
public static final String friday = "5";
public static final String saturday = "6";
public static final String sunday = "7";

 

其中字码中定义变量部分是不是与上面的代码很像,那我们来总结一下吧!

  1.    枚举类型声明定义的就是一个类,类是final类型,说明不可以被继承
  2. 枚举值(mondaytuesdaywensday…)都是类Weekday静态常量,可理解为类内部是对一组变量的封装。

 

 

     恩,暂停一下吧,我要先来解答一下上一篇中的问题,怎么通过enum来定义变量并赋值。

   

public enum Weekday {

 monday("1"),tuesday("2"),wensday("3"),thursday("4"),friday("5"),saturday("6"),sunday("7");
	
	// 成员变量
	private String value;

	// 构造方法
	private Weekday(String v){
		value = v;
	}
	
	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}
	
}

 

     哇有点小复杂,先消化一下吧!

 

 

   参考资料:

       http://www.cnblogs.com/frankliiu-java/archive/2010/12/07/1898721.html

       http://www.ibm.com/developerworks/cn/java/j-lo-enum/

你可能感兴趣的:(java,enum,枚举)