- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第12章 枚举
随着计算机的不断普及,程序不仅只用于数值计算,还更广泛地用于处理非数值的数据。例如,性别、月份、星期几、颜色、单位名、学历、职业等,都不是数值数据。在程序设计语言中,一般用一个数值来代表某一状态,这种处理方法不直观,易读性差。如果能在程序中用自然语言中有相应含义的单词来代表某一状态,则程序就很容易阅读和理解。要实现这种功能就要用到我们这一章要学习的枚举。
12.1 枚举简介
事先考虑到某一变量可能的取值,尽可能用自然语言中含义清楚的单词来表示它的每一个值,这种方法称为枚举方法。用这种方法定义的类型称为枚举类型。在生活中有很多关于枚举的例子,就如图12.1所示的两个例子。
12.2 枚举的使用
枚举在Java语言中的作用很大。它可以对类似的相同类型的对象同时进行声明,在程序中调用这些元素时,不会出现混淆和重复。由于枚举的统一性,使得开发人员编写的代码量大大减少了,同时增加了程序的阅读性和修改性。下面我们就来学习如何定义和使用枚举。
12.2.1 常见的枚举定义方法
在JDK 1.5中,Java引入了关于枚举类型的设置方法,即使用enum关键字。其一般的定义语法,如图12.2所示。
12.2.1 常见的枚举定义方法
例如我们可以举一个例子,比如设枚举名为weekday,枚举值有7个,即一周的7天。则凡被说明为weekday类型的变量取值,只能是这7天中的某一天。枚举变量有三种说明方式,我们可以采取任意一种方式进行说明,如图12.3所示。
12.2.2 在程序中使用枚举
当创建了一个枚举类型之后,就意味着要在今后的代码中进行调用。调用先前定义的枚举类型,同其他调用语句一样,需要声明该类的一个对象,并通过对象对枚举类型进行操作。
12.2.3 在switch语句中使用枚举
使用enum关键字创建的枚举类型,可以直接在多处控制语句中使用,如switch语句等。在JDK 1.5之前,switch语句只能用于判断字符或数字,而在JDK 1.5之后,通过enum创建的枚举类型,也可以被switch判断使用。
12.3 枚举类和枚举关键字
枚举类型的出现,有助于简洁程序的代码量,减少出错率。在大多数情况下,枚举类和枚举关键字是相互依存的。
12.3.1 枚举类
枚举类是在java.lang包下的一个公共类,它的作用是用来构造新的枚举类型。这是JDK 1.5之后Java推出的一个新的类,用来完善枚举这一常用集合在Java中的不足。在JDK API中我们可以看到,enum类定义了大约十多个方法。我们可以用表12.1简要的介绍一下这些方法。
方法名称
方法作用
clone()
复制一份当前对象,并返回
compareTo()
比较此枚举于指定对象的顺序
equals()
当指定对象等于此枚举常量时,返回true
hashCode()
返回枚举常量的哈希码
name()
返回枚举常量的名称,在其枚举声明中对其进行声明
ordinal()
返回枚举常量的系数
toString()
返回枚举常量的名称,它包含在声明中
valueOf()
返回带指定名称的指定枚举类型的枚举常量
values()
返回当前对象取值范围
12.3.2 枚举关键字
相对于枚举类,枚举关键字(enum关键字)则是定义的一个枚举类型。实际上,在此次定义的过程中,通过enum关键字相当于定义了一个类,并且此类将继承enum类。
12.4 类集对于枚举的支持
在JDK 1.5之后,Java中又增加了两个类集的操作类,EnumMap和EnumSet来更好地使用枚举。
12.4.1 EnumMap
Map是Java中的一个类,EnumMap是Map类的子类。我们可以调用EnumMap的方法来实现对对象的控制。
12.4.2 EnumSet
EnumSet本身是Set接口的子类但是此类中并没有定义任何的构造方法,这表示构造方法被私有化了。所有对此类方法的操作均是静态操作。
12.5 枚举的构造方法、接口和抽象方法
枚举的使用非常灵活。枚举可以应用于代码中的各个角落 ,只要定义的对象具有枚举的形式,均可以使用枚举对其定义,这样在减少代码量的同时,也增加了代码的可读性和可操作性。我们下面分别对枚举的构造方法、接口和抽象方法作一简要说明。
12.5.1 枚举的构造方法
在枚举中可以直接定义构造方法。但要注意的是:一旦构造方法定义之后,则所有的枚举对象都必须明确调用此构造方法。
12.5.2 枚举的接口
当一个枚举实现一个接口之后,各个枚举对象都必须分别实现接口中的抽象方法。
在调用枚举时,需要在后面实现在接口中定义的方法getColor(),只有这样,才能实现接口,而想直接调用RED(红色)这样的方式是错误的。
定义在枚举里的抽象方法必须在后期声明的枚
文档评论(0)