《Java枚举数据类型.docx》由会员分享,可在线阅读,更多相关《Java枚举数据类型.docx(10页珍藏版)》请在课桌文档上搜索。
1、程序gctChineseScason(Scason.SPRING)是我们预期的运用方法。可getChineseSeason(5)明显就不是了,而且编译很通过,在运行时会出现什么状况,我们就不得而知了。这明显就不符合JaVa程序的类型平安。接产来我们来考虑一产这种模式的可读性。运用枚举的大多数场合,我都须要便利得到枚举类型的字符申表达式;。假如将int枚举常量打印出来,我们所见到的就是一组数字,这是没什么太大的用处。我们可能会想到运用String常量代替int常增。虽然它为这些常M供应了可打印的字符串,但是它会导致性能问题,因为它依靠于字符申的比较操作,所以这种模式也是我们不期望的。从类型平安性
2、和程序可读性两方面考虑,int和String枚举模式的缺点就显露出来了。幸运的是,从JaVal.5发行版本起先,就提出了另一种可以替代的解决方案,可以避开int和String枚举模式的缺点,并供应了很多额外的好处。那就是枚举类型(enumtype)o接下来的章节将介绍枚举类型的定义、特征、应用场景和优缺点。2.定义枚举类型(CnUmtyPe)是指由一组固定的常城组成合法的类型。Java中由关键字enum来定义一个枚举类型。下面就是java枚举类型的定义。?1publicenumSeason2SPRING,SUMMER,AUTUMN,WINER;33.特点publicclassUseSeason
3、13141516171819202122232425262728293031323334/f* 将英文的季节转换成中文季节* Paramseason* return7publicStringgetChineseSeason(Seasonseason)!StringBufferresult=newStringBufferO;switch(season)caseSPRING:result.append11中文:春天,枚举常址:+SeaSOn.name。+,数据:+SeaSbreak;caseAUTUMN:result.append(C:秋天,枚举能,量:+SeaSOn.name。+,数据:+Sea
4、Sbreak;caseSUMMER:result.append(,:夏天,枚举常最广+season.name。+,数据:+seasbreak;caseWINTER:result.append11r文:一冬天,枚举常量:”+SeaSOn.name。+,数据:+SeaSbreak;default:35result.append(地球没有的季节+season.name);36break;3738returnresult.toString();394041publicvoiddoSomething()42for(SeasonS:Season.valucs()43SyStem.oUt.println(g
5、etChineseSeason(三);这是正常的场景4445/System.out.println(getChineseSeason(5);46此处已经是编译不通过了,这就保证了类型平安474849publicstaticvoidmain(String11arg)50UseSeasonUseSeason=newUseSeasonO;51useSeason.doSomething();5253【中文:春天,枚举常量:SPRlNG,数据:1H中文:夏天,枚举常AhSUMMER,数据中文:秋天,枚举常成:AUTUMN,数据:3中文:冬天,枚举常好:WlNTER,数据:4这里有一个问题,为什么我要将域
6、添加到枚举类型中呢?H的是想将数据与它的常量关联起来。如1代表春天,2代表史天。5 .总结那么什么时候应当运用枚举呢?每当须要一组固定的常盘的时候,如一周的天数、一年四季等。或者是在我们编译前就知道其包含的全部值的集合。JaVaI.5的枚举能满意绝大部分程序员的要求的,它的简明,易用的特点是很突出的.6 .用法用法一:常量?1 publicenumColor2 RED,GREEN,B1.ANK,YE1.1.OW31用法二:switch1enumSignal!2GREEN,YE1.1.OW,RED34publicclassTraffic1.ight5Signalcolor=Signa1.RED;
7、6publicvoidchange7switch(color)8caseRED:9color=Signa1.GREEN;10break;11caseYE1.1.OW:12color=Signa1.RED;13break;14caseGREEN:15color=Signa1.YE1.1.OW;16break;1718:19!用法三:向枚举中添加新方法1publicenumColor2RED(“红色”,1),GREEN(绿色,2),B1.ANK(白色3/成员变量4privateStringname;5privateintindex;6/构造方法7privateColor(Stringname,in
8、tindex)8this,name=name;,3),YE1.1.or黄色,4);1011121314151617181920212223242526272829this.index=index;/一般方法publicstaticStringgetName(intindex)for(Colorc:Color.values()if(c.getlndex()=index)returnc.name;returnnull;/getset方法publicStringgetName()returnname;publicvoidsetName(Stringname)this.name=name;public
9、intgetlndexreturnindex;30publicvoidsetlndex(intindex)31this,index=index;3233用法四:及聋枚举的方法publicenumColor(REDr红色”,1),GREENr绿色,2),B1.ANKr白色”,3),YE1.1.or黄色,4);/成员变量privateStringname;privateintindex;/构造方法privateColor(Stringname,intindex)this.name=name;9this,index=index;10覆盖方法12OverridepublicStringtoString
10、()14returnthis.index+J+this.name;1516用法五:实现接口123456789101112131415161718192021publicinterfaceBehaviourvoidprintO;Stringgetlnfo();publicenumColorimplementsBchaviourRED(“红色,1),GREENS,2),B1.ANKS”,3),YE1.1.OfW,4);/成员变量privateStringname;privateintindex;/构造方法privateColorfStringname,intindex)this.name=name;this.index=index;接口方法OverridepublicStringgetlnfoOreturnthis.name;接口方法Override22publicvoidprint()23System.out.println(this.index+this.name);24!25用法六:运用接口组叙枚举?1 publicinterfaceFood2 enumCoffeeimplementsFood3B1.ACK_COFFEE,DECAF_COFFEE,1.ATTE,CAPPUCCINO45enumDessertimplementsFood;6FRUIT,CAKE,GE1.ATO78