文档章节

java(二十二)枚举

胡脸脸
 胡脸脸
发布于 2016/01/27 15:03
字数 579
阅读 56
收藏 3

枚举类:实例有限而且固定的类。

在早期,使用一些静态常量来表示枚举,但存在很多问题:类型不安全、没有命名空间,打印输出的值没有具体意义。

jdk 1.5 以后添加了枚举类。用关键字enum来表示,跟class、interface的地位是相同的。

枚举类是一种特殊的类:

  1. 继承了 java.lang.Enum 而不是Object类,所以不能显式继承其他父类。java.lang.Enum 类实现了两个接口:java.lang.Serializable 和 java.lang.Comparable。

  2. 使用enum定义、非抽象的枚举类默认会用final修饰,因此不能派生子类。

  3. 枚举类的构造器只能用private来修饰。

  4. 枚举类的所有实例必须显式在第一行声明,否则永远不能构建实例。


如果想要使用枚举类的某个实例,可以用 枚举类名.实例名 的形式调用。

枚举类提供了一个values方法,可以很方便的用来遍历枚举类:

for( 枚举类名 s : 枚举类名.values() ){

}

注意: jdk 1.5 以后,switch控制语句可以使用枚举类,case语句判断时直接用枚举类的实例名,不用加枚举类的限定。

java.lang.Enum类提供了几个方法:

int compareTo() :比较顺序。

String name() :返回该枚举类实例的名称。

String toString() :与name() 方法相似,也是返回实例的名称,但是更为常用。

int ordinal() :返回枚举实例在枚举类中的索引值。


实现接口的枚举类:

可以由枚举类来实现接口的方法,这样所有的枚举值调用同一个方法。

也可以每个枚举值分别实现接口的方法,这样调用每个枚举值的方法的时候就不一样。


包含抽象方法枚举类:

不同的枚举值对同一个方法有不同的实现的时候,可以定义这个方法为抽象方法。然后四个枚举值提供不同的实现。

在枚举类里定义抽象方法时,不能显式的为枚举类添加abstract关键字,但系统会隐式的添加。

因为枚举类需要显式的创建枚举值,所以每个枚举值必须提供抽象方法的实现。



© 著作权归作者所有

共有 人打赏支持
胡脸脸
粉丝 2
博文 27
码字总数 9780
作品 0
济南
Java中枚举的线程安全性及序列化问题

来源:微信公众号 ,原创: Hollis --枚举是如何保证线程安全的 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和class一样,只是一个关键字...

Java填坑之路
08/02
0
0
Java语言学习(十一):枚举类型和泛型

Java中一个重要的类型:枚举,它可以用来表示一组取值范围固定的变量,使用 enum 关键字定义枚举类型,其中元素不能重复,通常大写表示。利用Java的反射机制,可以在运行时分析类,如查看枚举...

海岸线的曙光
07/18
0
0
为什么我墙裂建议大家使用枚举来实现单例

我们知道,单例模式,一般有七种写法,那么这七种写法中,最好的是哪一种呢?为什么呢?本文就来抽丝剥茧一下。 哪种写单例的方式最好 在StakcOverflow中,有一个关于What is an efficient ...

冷_6986
06/13
0
0
java编程新手入门学习的基础语法

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰
05/28
0
0
为什么我墙裂建议大家使用枚举来实现单例。

关于单例模式,我的博客中有很多文章介绍过。作为23种设计模式中最为常用的设计模式,单例模式并没有想象的那么简单。因为在设计单例的时候要考虑很多问题,比如线程安全问题、序列化对单例的...

06/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

es6

在实际开发中,我们有时需要知道对象的所有属性,原生js给我们提供了一个很好的方法:Object.keys(),该方法返回一个数组 传入对象,返回属性名 var obj = {'a':'123','b':'345'};console.l...

不负好时光
11分钟前
0
0
叮!您收到一份超值Java基础入门资料!

摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例...

全部原谅
13分钟前
0
0
web.xml容器加载顺序

容器对于web.xml的加载过程是context-param >> listener >> fileter >> servlet

Aeroever
15分钟前
1
0
Docker容器日志查看与清理

1. 问题 docker容器日志导致主机磁盘空间满了。docker logs -f container_name噼里啪啦一大堆,很占用空间,不用的日志可以清理掉了。 2. 解决方法 2.1 找出Docker容器日志 在linux上,容器日...

muzi1994
16分钟前
0
0
J2Cache 和普通缓存框架有何不同,它解决了什么问题?

不少人看到 J2Cache 第一眼时,会认为这就是一个普普通通的缓存框架,和例如 Ehcache、Caffeine 、Spring Cache 之类的项目没什么区别,无非是造了一个新的轮子而已。事实上完全不是一回事!...

红薯
19分钟前
414
11

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部