版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
工・背景
在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声
明一组具有int常量。之前我们通常利用publicfinalstatic方法定义的
代码如F,分别用1表示春天,2表示夏天,3表示秋天,4表示冬天。
?
1publicclassSeason{
2publicstaticfinalintSPRING=1;
3publicstaticfinalintSUMMER=2;
4publicstaticfinalintAUTUMN=3;
5publicstaticfinalintWINTER=4;
6}
这种方法称作int枚举模式。可这种模式有什么问题呢,我们都用了那么
久了,应当没问题的。通常我们写出来的代码都会考虑它的平安性、易用
性和可读性。首先我们来考虑一下它的类型平安性。当然这种模式不是
类型平安的。比如说我们设计一个函数,要求传入春夏秋冬的某个值。但
是运用int类型,我们无法保证传入的值为合法。代码如下所示:
1privateStringgetChineseSeason(intseason){
2StringBufferresult=newStringBufferQ;
3switch(season){
4caseSeason.SPRING:
5result.append(“春天”);
6break;
7caseSeason.SUMMER:
8result.append("夏天”);
9break;
10caseSeason.AUTUMN:
11result.append("秋天");
12break;
13caseSeason.WINTER:
14result.append("冬天");
15break;
16default:
17result.append("地球没有的季节");
18break;
19}
20returnresult.toStringf);
21}
22
23publicvoiddoSomething(){
24System.out.println(this.getChineseSeason(Season.SPRING));//这是正常
25
26System.out.println(this.getChineseSeason⑸);〃这个却是不正常的场景,:
27担心全问题
程序getChineseSeason(Season.SPRING)是我们预期的运用方法。可
getChineseSeason⑸明显就不是了,而且编译很通过,在运行时会出现
什么状况,我们就不得而知了。这明显就不符合Java程序的类型平安。
接下来我们来考虑一下这种模式的可读性。运用枚举的大多数场合,我都
须要便利得到枚举类型的字符串表达式。假如将int枚举常量打印出来,
我们所见到的就是一组数字,这是没什么太大的用处。我们可能会想到运
用String常量代替int常量。虽然它为这些常量供应了可打印的字符串,
但是它会导致性能问题,因为它依靠于字符串的比较操作,所以这种模式
也是我们不期望的。从类型平安性和程序可读性两方面考虑,int和
String枚举模式的缺点就显露出来了。幸运的是,从Javal.5发行版本
起先,就提出了另一种可以替代的解决方案,可以避开int和String枚举
模式的缺点,并供应了很多额外的好处。那就是枚举类型(enumtype)。
接下来的章节将介绍枚举类型的定义、特征、应用场景和优缺点。
2.定义
枚举类型(enumtype)是指由一组固定的常量组成合法的类型。Java
中山关键字enum来定义一个枚举类型°下面就是java枚举类型的定义。
*
1publicenumSeason{
2SPRING,SUMMER,AUTUMN,WINER;
3}
3.特点
Java定义枚举类型的语句很简约。它有以下特点:
1)运用关键字enum2)类型名称,比如这里的Season3)一串允许的
值,比如上面定义的春夏秋冬四季4)枚举可以单独定义在一个文件中,
也可以嵌在其它Java类中。
除了这样的基本要求外,用户还有一些其他选择
5)枚举可以实现一个或多个接口(Interface)6)可以定义新的变量7)
可以定义新的方法8)可以定义依据详细枚举值而相异的类
4.应用场景
以在背景中提到的类型平安为例,用枚举类型重写那段代码。代码如下:
publicenumSeason{
SPRING(l),SUMMER(2),AUTUMN(3j,WINTER(4);
privateintcode;
privateSeason(intcode)(
this.code=code;
publicintgetCode(){
returncode;
13publicclassUseSeason{
14/**
15*将英文的季节转换成中文季节
16*@paramseason
17*©return
18*/
19publicStringgetChineseSeason(Seasonseason){
20StringBufferresult=newStringBufferQ;
21switch(season){
22caseSPRING:
23result.append/[中文:春天,枚举常量:"+season.name。+数据:"+seas
24break;
25caseAUTUMN:
26result.append/[中文:秋天,枚举常量:"+season.name。+数据:"+seas
27break;
28caseSUMMER:
29result.append/[中文:夏天,枚举常量:"+season.name。+数据:"+seas
30break;
31caseWINTER:
32result.append][中文:冬天,枚举常量:"+season.name。+数据:"+seas
33break;
34default:
35resvdt.append("地球没有的季节"+Q);
36break;
37}
38returnresult.toStringQ;
39}
40
41publicvoiddoSomething(){
42for(Seasons:Season.values()){
43System.out.println(getChineseSeasonfs));//这是正常的场景
44}
45//System.out.println(getChineseSeason(5));
46//此处已经是编译不通过了,这就保证了类型平安
471
48
49publicstaticvoidmain(String[]arg){
50UseSeasonuseSeason=newUseSeasonQ;
51useSeason.doSomething();
52}
53!
[中文:春天,枚举常量:SPRING,数据:1][中文:夏天,枚举常
量:SUMMER,数据:2][中文:秋天,枚举常量:AUTUMN,数据:3][中
文:冬天,枚举常量:WINTER,数据:4]
这里有一个问题,为什么我要将域添加到枚举类型中呢?目的是想将数据
与它的常量关联起来。如1代表春天,2代表夏天。
5.总结
那么什么时候应当运用枚举呢?每当须要一组固定的常量的时候,如一周
的天数、一年四季等。或者是在我们编译前就知道其包含的全部值的集合。
Java1.5的枚举能满意绝大部分程序员的要求的,它的简明,易用的特点
是很突出的。
6.用法
用法一:常量
1publicenumColor{
2RED,GREEN,BLANK,YELLOW
3!
用法二:switch
1enumSignal{
2GREEN,YELLOW,RED
3:
4publicclassTrafficLight{
5Signalcolor=Signal.RED;
6publicvoidchangef){
7switch(color!{
8caseRED:
9color=Signal.GREEN;
10break;
11caseYELLOW:
12color=Signal.RED;
13break;
14caseGREEN:
15color=Signal.YELLOW;
16break;
17!
18(
19}
用法三:向枚举中添加新方法
1publicenumColor{
2RED(“红色",1),GREEN(“绿色",2),BLANK(“白色",3),YELLO(“黄色”,4);
3//成员变量
4privateStringname;
5privateintindex;
6//构造方法
7privateColor(Stringname,intindex){
8this.name=name;
9this.index=index;
10
11//一般方法
12publicstaticStringgetNamefintindex){
13for(Colorc:Color.valuesO){
14if(c.getlndexf)==index){
15return;
16I
17}
18returnnull;
19I
20//getset方法
21publicStringgetNameQ{
22returnname;
23
24publicvoidsetNamefStringname){
25=name;
26}
27publicintgetlndexf){
28returnindex;
29
30publicvoidsetlndex(intindex){
31this.index=index;
32}
33}
用法四:覆盖枚举的方法
?
1publicenumColor{
2RED(“红色”,1),GREEN(“绿色",2),BLANK(“白色",3),YELLO(“黄色”,4);
3//成员变量
4privateStringname;
5privateintindex;
6//构造方法
7privateColor(Stringname,intindex){
8=name;
9this.index=index;
10}
11//覆盖方法
12©Override
13publicStringtoStringO{
14returnthis.index+"_"+;
15!
16}
用法五:实现接口
?
1publicinterfaceBehaviour)
2voidprint();
3StringgetlnfoQ;
4}
5publicenumColorimplementsBehaviour{
6RED(“红色”,1),GREEN(“绿色",2),BLANK(“白色",3),YELLO("黄色”,4);
7//成员变量
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 拖拉机驾驶员标准化测试考核试卷含答案
- 活体水产品购销员岗前执行能力考核试卷含答案
- 2026-2030中国锂电池隔膜行业市场发展分析及发展前景预测研究报告
- 人教统编版必修下册第一单元1(子路、曾皙、冉有、公西华侍坐齐桓晋文之事庖丁解牛)1.2齐桓晋文之事教学设计
- 新教材高中物理 第十三章 电磁感应与电磁波初步 第二节 磁感应强度 磁通量教案 新人教版必修3
- 四年级英语下册 Unit 5 What will you do this weekend Lesson 25教学设计 人教精通版(三起)
- 苏教版必修2技术与设计2第一单元结构与设计简单结构的设计教案
- 地理气温试题及详细答案
- 全国粤教清华版初中信息技术九年级下册第1单元第1课《智能风暴-牵手智能机器人》教学设计
- 小学唱歌小步舞曲公开课教案
- 2026师德师风大会主持词
- 大连市甘井子西侧海岸生态保护和修复工程环境影响报告表
- 2026年山东省统考中考语文真题含答案
- 2025年江苏省国信集团招聘考试真题及答案
- 大学分班考试数学试卷
- 高考知识复习 高中数学必背公式
- 2025儋州市白马井镇社区工作者招聘考试真题及答案
- QC/T 1231-2025乘用车电磁阀式连续阻尼控制减振器总成
- 施工现场班组长安全培训
- 医院耗材试剂采购制度及流程
- 急诊镇静镇痛管理规范
评论
0/150
提交评论