1、
publicenumColor{
RED,BLUE,BLACK,YELLOW,GREEN
}
enum很像特殊class,事实上enum声明定义类型就是一种类
这些类都是库类中Enum类子类(Java.lang.Enum
2、点 1.用enum定义枚举类默认继承了Java.lang.Enum类而不是继承了Object类。其中java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口 2.枚举类构造函数只能使用private访问修饰符,如果省略了其构造器访问控制符,则默认使用private修饰; 3.枚举类所有实例必要在枚举类中显式列出,否则这个枚举类将永远都不能产生实例。列出这些实例时,系统会自动添加publicstaticfinal修饰,无需程序员显式添加。 代码如下: publicenumWeek{ MON{ publicSt
3、ringtoLocaleString{ return"星期一"; } },TUES{ publicStringtoLocaleString{ return"星期二"; } },WEB{ publicStringtoLocaleString{ return"星期三"; } },THUR{ publicStringtoLocaleString{ return"星期四"; } },FRI{ publicStringtoLocaleString{ return"星期五"; } },SAT{ publicStringtoLocaleString{ return"
4、星期六"; } },SUN{ publicStringtoLocaleString{ return"星期日"; } }; publicabstractStringtoLocaleString; } 枚举遍历 代码如下: publicclassEnumTest{ publicstaticvoidmain(Stringargs){ for(Weekw:Week.values){ System.out.println(w); } } } 枚举惯用办法 intcompareTo办法 Stringname返回枚举实例名称 intordinal返回枚举值在枚举中索
5、引 StringtoString返回枚举实例名称比name更惯用 publicstaticvalueOf 代码如下: publicclassEnumTest{ publicstaticvoidmain(Stringargs){ Weekday=Week.FRI; System.out.println(day);//FRI System.out.println(day.name);//FRI System.out.println(day.ordinal);//4 System.out.println(Week.valueOf("SUN").toLocaleString);//
6、星期日 System.out.println(Week.values.length);//7获取枚举长度 } } 枚举构造函数 代码如下: publicenumGender{ MALE("男"),FEMALE("女"); privateStringname; privateGender(Stringname){ this.name=name; } publicStringgetName{ returnthis.name; } publicStringtoString{ Stringname=null; switch(this){ caseMALE: nam
7、e="男"; break; caseFEMALE: name="女"; break; } returnname; } } 枚举综合应用示例:交通灯 代码如下: publicenumLamp{ /*每个枚举元素各表达一种方向控制灯*/ S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",false), /*下面元素表达与上面元素相反方向灯,它们“相反方向灯”和“下一种灯”应忽视不计!*/ N2S(null,null,false),N2E(null
8、null,false),W2E(null,null,false),W2N(null,null,false), /*由南向东和由西向北等右拐弯灯不受红绿灯控制,因此,可以假想它们总是绿灯*/ S2E(null,null,true),E2N(null,null,true),N2W(null,null,true),W2S(null,null,true); privateLamp(Stringopposite,Stringnext,booleanlighted){ this.opposite=opposite; this.next=next; this.lighted=lighted;
9、 } /*当前灯与否为绿*/ privatebooleanlighted; /*与当前灯同步为绿相应方向*/ privateStringopposite; /*当前灯变红时下一种变绿灯*/ privateStringnext; publicbooleanisLighted{ returnlighted; } /***某个灯变绿时,它相应方向灯也要变绿*/ publicvoidlight{ this.lighted=true; if(opposite!=null){ Lamp.valueOf(opposite).light; } System.out.printl
10、n(name+"lampisgreen,下面总共应当有6个方向能看到汽车穿过!"); } /***某个灯变红时,相应方向灯也要变红,并且下一种方向灯要变绿*@return下一种要变绿灯*/ publicLampblackOut{ this.lighted=false; if(opposite!=null){ Lamp.valueOf(opposite).blackOut; } LampnextLamp=null; if(next!=null){ nextLamp=Lamp.valueOf(next); System.out.println("绿灯从"+name+"-------->切换为"+next); nextLamp.light; } returnnextLamp; } }






