天天看点

java特性之Enum枚举类型

          枚举类型出现之前,在java的接口或者是类中经常出现public static final修饰的常量,为了让程序员抛弃这种常量

所以就出现了枚举语法,同时在一个大项目中,有不同的人协作完成一个任务,在项目中所用到的比如星期,月份,等这样的会用不同的命名发生冲突,枚举类型还可以屏蔽枚举值的类型信息,完成封装的要求。枚举类就是一个类,,可以用类的方法来理解枚举enum;

第一:枚举的基本应用:

    public class WeekDay

{   

public enum WeekDay{
		SUN,MON,TUE,WED,THU,FN,SAT
	}
	/*枚举类型可以代替java中的public static final,所以的枚举类型都继承于枚举类:
	 * protected Enum(String name,int ordinal);
	 */
	public static void main(String []args){
		WeekDay today=WeekDay.SAT;      //在初始化的时候,应该是WeekDay 的对象初始化;
	    System.out.println("今天是"+today);
	    System.out.println("今天是"+today.name());
	    System.out.println("今天是"+today.toString());
	    System.out.println("今天是"+today.ordinal());    //返回此序列的序数
	    System.out.println("今天是"+WeekDay.valueOf("SAT"));
	    System.out.println("-------------");
	    WeekDay[]days=WeekDay.values();
	    
	    System.out.println("星期中包含"+days.length+"天");
	    for(WeekDay x:days)
	    {
	    	System.out.println("星期包含"+x);
	    }
		
           

       }

结果是:

今天是SAT
今天是SAT
今天是SAT
今天是6
今天是SAT
今天是SAT
-------------
星期中包含7天
星期包含SUN
星期包含MON
星期包含TUE
星期包含WED
星期包含THU
星期包含FN
星期包含SAT
           

在使用枚举的构造函数时,使用enum修饰,其中内的元素大多是常量元素,一般大写表示,同时在定义枚举类型的时候,声明常量时,继承了Enum类

             格式为:Protected  Enum(String name,int ordinal)

参数name为枚举常量的名称,参数ordinal为枚举常量的序数;

其中还有好几个常用的方法:对象.toString():返回枚举常量的名称;对象.属性(name和ordinal)返回响应的值,

   valueof (class enumType,String name);返回带指定名称的指定枚举类型的枚举常量。名称必须与在此类型中声明枚举常量所用的标识符完全匹配。

   values()方法返回该类中的所有枚举常量;

第二个enum的问题:Enum的本质是类,那么枚举的类也有它的构造函数:

       构造函数,也是枚举的构造函数,必须放在枚举常量的后面,即在声明了public enum WeekDay{}之后,才能声明枚举的构造函数,同时枚举的构造函数的修饰符必须是private;枚举类型的自定义的构造函数不能覆盖默认执行的构造函数,只会在之后执行。

public class EnumTest2 {

	public enum WeekDay{
		SUN,MON,TUE,WED,THU,FN("星期五"),SAT("星期六");
		private WeekDay(){
			System.out.println("无参数构造函数");
		}
		private WeekDay(String s){
				System.out.println(s+"有参数构造函数");
				
		}
		
	}
	public static void main(String []args){
		WeekDay today=WeekDay.SAT;
	}
}
           

结果是:

无参数构造函数
无参数构造函数
无参数构造函数
无参数构造函数
无参数构造函数
星期五有参数构造函数
星期六有参数构造函数