文档章节

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
JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52724939 JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千! 经过了几...

Aduroidpc
2016/10/02
0
0
为什么我墙裂建议大家使用枚举来实现单例

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

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

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

Java小辰
05/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

创建第一个react项目

sudo npm i -g create-react-app@1.5.2 create-react-app react-app cd react-apprm -rf package-lock.jsonrm -rf node_modules #主要是为了避免报错npm installnpm start......

lilugirl
今天
3
0
在浏览器中进行深度学习:TensorFlow.js (八)生成对抗网络 (GAN)

Generative Adversarial Network 是深度学习中非常有趣的一种方法。GAN最早源自Ian Goodfellow的这篇论文。LeCun对GAN给出了极高的评价: “There are many interesting recent development...

naughty
今天
0
0
搬瓦工镜像站bwh1.net被DNS污染,国内打不开搬瓦工官网

今天下午(2018年10月17日),继搬瓦工主域名bandwagonhost.com被污染后,这个国内的镜像地址bwh1.net也被墙了。那么目前应该怎么访问搬瓦工官网呢? 消息来源:搬瓦工优惠网->搬瓦工镜像站b...

flyzy2005
今天
9
0
SpringBoot自动配置

本篇介绍下,如何通过springboot的自动配置,将公司项目内的依赖jar,不需要扫描路径,依赖jar的情况下,就能将jar内配置了@configuration注解的类,创建到IOC里面 介绍下开发环境 JDK版本1.8 spr...

贺小五
今天
5
0
命令行新建Maven多项目

参考地址 # DgroupId 可以理解为包名# DartifactId 可以理解为项目名mvn archetype:generate -DgroupId=cn.modfun -DartifactId=scaffold -DarchetypeArtifactId=maven-archetype-quickst......

阿白
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部