ava enum(枚举)使用详解 + 总结

enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中。

下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容:

1. 原始的接口定义常量

2. 语法(定义)

3. 遍历、switch 等常用操作

4. enum 对象的常用方法介绍

5. 给 enum 自定义属性和方法

6. EnumSet,EnumMap 的应用

7. enum 的原理分析

8. 总结

原始的接口定义常量

语法(定义)

创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式 Class Enum<E extends Enum<E>>,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。

遍历、switch 等常用操作

对enum进行遍历和switch的操作示例代码:

输出结果:

enum 对象的常用方法介绍

int compareTo(E o) 比较此枚举与指定对象的顺序。

Class<E> getDeclaringClass() 返回与此枚举常量的枚举类型相对应的 Class 对象。

String name() 返回此枚举常量的名称,在其枚举声明中对其进行声明。

int ordinal() 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

String toString()

返回枚举常量的名称,它包含在声明中。

static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) 返回带指定名称的指定枚举类型的枚举常量。

输出结果:

给 enum 自定义属性和方法

给 enum 对象加一下 value 的属性和 getValue() 的方法:

输出结果:

EnumTest.FRI 的 value = 5

EnumSet,EnumMap 的应用

原理分析

enum 的语法结构尽管和 class 的语法不一样,但是经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum<E>。EnumTest 经过反编译(javap com.hmw.test.EnumTest 命令)之后得到的内容如下:

所以,实际上 enum 就是一个 class,只不过 java 编译器帮我们做了语法的解析和编译而已。

总结

可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java是单一继承)。

原文发布于微信公众号 - java一日一条(mjx_java)

原文发表时间:2015-11-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏水击三千

浅谈JavaScript的面向对象程序设计(一)

  面向对象的语言有一个标志,他们都有类的概念,通过类可以创建多个具有相同属性和方法的对象。但是JavaScript中没有类的概念,因此JavaScript与其...

2727
来自专栏互扯程序

大牛:你真的懂反射吗?

现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享。

1333
来自专栏coding for love

JS入门难点解析12-继承的实现方式与优缺点

(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)

1623
来自专栏贾鹏辉的技术专栏@CrazyCodeBoy

Java反射研究和实践

本博文中项目代码已开源下载地址:GitHub Java反射研究和实践 概述 Java的反射机制是Java语言动态性的一种体现。反射机制是通过反射API来实现的,...

3368
来自专栏柠檬先生

你不知道的javaScript笔记(3)

对象 对象可以通过两种形式定义: 声明形式和构造形式 声明形式语法: var myObj = {key:value} 构造形式语法: var myObj = n...

1845
来自专栏java达人

java反射简明示例

Java反射在我们Java学习的过程中是非常重要的知识点。可能有些同学认为这个学习起来不容易理解,其实就我个人而言还是比较简单,学习起来也比较容...

2046
来自专栏java技术学习之道

java反射详解

1595
来自专栏空帆船w

Java 反射基础

最近在调研 Android 应用加固方案,涉及大量反射技术,因此趁这个机会总结下 Java 反射的一些知识。

992
来自专栏前端架构与工程

【译】《Understanding ECMAScript6》- 第五章-Class

目录 ES5中的拟Class结构 Class声明 Class表达式 存储器属性 静态成员 派生类 new.target 总结 自JavaScript面世以来,许...

2246
来自专栏Ryan Miao

Java复习3-类的继承

本次学习面向对象设计的另外一个基本概念:继承(inheritance)。这是Java程序设计中的一项核心技术。另外,还要学习反射(reflection)的概念。

1022

扫码关注云+社区

领取腾讯云代金券