文档章节

java(二十二)枚举

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

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

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

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
济南
私信 提问
二十二、枚举

说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略 上一讲介绍了结构体...

长平狐
2013/03/28
56
0
Java中枚举的线程安全性及序列化问题

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

Java填坑之路
2018/08/02
0
0
Java程序员从笨鸟到菜鸟之——总结和声明

前段时间经过大约二十天的时间把javaSE的内容总结了一下,最近由于个人原因和一些乱七八糟的事情,一直没在更新,首先感谢那些一如既往支持我的朋友。最近不知道为什么,一直很懒,做东西也一...

长平狐
2012/11/12
98
0
关于jdk1.6的instrumentation代理使用问题

Java SE 6 的新特性:虚拟机启动后的动态 instrument 在 Java SE 5 当中,开发者只能在 premain 当中施展想象力,所作的 Instrumentation 也仅限与 main 函数执行前,这样的方式存在一定的局...

关键词
2014/03/12
202
0
为什么我墙裂建议大家使用枚举来实现单例。

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

2018/06/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MIT 6.828 main.c文件分析

#include <inc/x86.h>#include <inc/elf.h> /*这是一个简单粗略的boot loader,它唯一的工作就是从硬盘的第一个扇区启动格式为ELF的内核镜像硬盘布局这个程序(包括boot.S和mai...

FeanLau
20分钟前
0
0
SpringBoot 整合 Redis

1. pom.xml 文件中添加 Redis 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusio......

北漂的我
28分钟前
1
0
TechDay实录 | 认识PaddlePaddle:更低使用成本、更高开发效率的深度学习框架

导读: 在人工智能时代,各行各业都在尝试利用机器学习/深度学习等前沿技术来解决自身的业务需求,深度学习框架也应运而生。为了继续帮助AI开发者们在深度学习的道路上快速升级,百度PaddleP...

PaddleWeekly
29分钟前
3
0
JAVA AES加解密服务

package com.pasenger.aes;import lombok.Data;import org.apache.commons.codec.binary.Base64;import org.springframework.beans.factory.InitializingBean;import org.springframewo......

Pasenger
40分钟前
0
0
SpringCloud集成 Mybatis分表插件shardbatis 踩坑日志及其原理分析

公司新开发的系统数据量过大,需要进行分表处理,我在网上浏览一圈,选中了Shardbatis,原因有二: 1.公司项目本身集成了Mybatis,而Shardbatis是其插件,引入方便; 2.Sharbatis十分轻便,只...

L墨龙
47分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部