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

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

8. 总结

原始的接口定义常量

语法(定义)

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

这段代码实际上调用了7次 Enum(String name, int ordinal):

遍历、switch 等常用操作

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

输出结果:

enum 对象的常用方法介绍

intcompareTo(E o)

比较此枚举与指定对象的顺序。

ClassgetDeclaringClass()

返回与此枚举常量的枚举类型相对应的 Class 对象。

Stringname()

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

intordinal()

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

StringtoString()

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

static > TvalueOf(Class enumType, String name)

返回带指定名称的指定枚举类型的枚举常量。

输出结果:

给 enum 自定义属性和方法

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

输出结果:

EnumSet,EnumMap 的应用

原理分析

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

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

总结

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

java enum 定义属性_java enum(枚举)使用详解 + 总结相关推荐

  1. java单例设计模式_Java设计模式之单例模式详解

    在Java开发过程中,很多场景下都会碰到或要用到单例模式,在设计模式里也是经常作为指导学习的热门模式之一,相信每位开发同事都用到过.我们总是沿着前辈的足迹去做设定好的思路,往往没去探究为何这么做,所以 ...

  2. Java 初始化 代码块_Java中初始化块详解及实例代码

    Java中初始化块详解 在Java中,有两种初始化块:静态初始化块和非静态初始化块. 静态初始化块:使用static定义,当类装载到系统时执行一次.若在静态初始化块中想初始化变量,那仅能初始化类变量, ...

  3. java代码轻量级锁_Java轻量级锁原理详解(Lightweight Locking)

    转自http://www.cnblogs.com/redcreen/archive/2011/03/29/1998801.html 大家知道,Java的多线程安全是基于Lock机制实现的,而Lock的 ...

  4. java的static类_java中staticclass静态类详解

    一般情况下是不可以用static修饰类的.如果一定要用static修饰类的话,通常static修饰的是匿名内部类. 在一个类中创建另外一个类,叫做成员内部类.这个成员内部类可以静态的(利用static ...

  5. java connection 单例_Java设计模式之单例模式详解

    Java设计模式之单例模式详解 什么是设计模式 设计模式是在大量的实践中总结和理论之后优选的代码结构,编程风格,以及解决问题的思考方式.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可 ...

  6. java指数表示法_Java指数计数法详解

    Java指数计数法详解 时间:2017-10-16     来源:华清远见Java培训中心 Java指数计数法并不是一个很难的运算,关键是你要理解应用,很多朋友不理解Java指数计数法,所以也无从运用 ...

  7. java解析json数据_java解析JSON数据详解

    JSON是目前最流行的轻量级数据交换语言(没有之一).尽管他是javaScript的一个子集.但由于其是独立与语言的文本格式,它几乎可以被所有编程语言所支持. 以下是对java语言中解析json数据的 ...

  8. java中object类型_Java常用类object详解

    1.Object概述: 类Object是类层次结构的根类.每个类都使用Object作为超类.所有对象(包括数组)都实现这个类的方法. 2.构造方法详细信息: Object只有一个无参构造方法,因为ob ...

  9. 组合模式java怎么获取钥匙_java中组合模式详解和使用方法

    组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这种类型的设计模式属于结构型模式, ...

最新文章

  1. OpenCASCADE:下载安装
  2. linux python pymysql,Python之pymysql的使用
  3. 【转】ABP源码分析十一:Timing
  4. mount --bind的用处
  5. Windows10/11安装Linux子系统Ubuntu 20.04LTS,轻松使用生信软件,效率秒杀虚拟机
  6. mysql - GTID主从复制
  7. linux命令界面输入不了密码,如何在 Linux 中不输入密码运行 sudo 命令
  8. ROS Image_transport使用
  9. ios控制ios_iOS UIMenuController UIMenuItem
  10. IOS之未解问题--给UITableView提取UITableViewDataSource并封装瘦身失败
  11. 埃夫特机器人示教器linux屏幕多少钱,不限 埃夫特机器人电路板维修
  12. 题解 P2212 【[USACO14MAR]浇地Watering the Fields】
  13. vue项目引入typescript(vue与ts混用)
  14. 手把手教你做游戏外挂
  15. 《Reasoning about Entailment with Neural Attention》阅读笔记
  16. Android基础 《密西西比河谷州立大学:Android应用程序开发》(一)
  17. python输出字符串两次_下列程序的运行结果是: str = Hello print(str * 2) # 输出字符串两次 print(str + Python!) # 连接字符串_学小...
  18. mysql create table as select from_CREATE TABLE 表名 AS SELECT 语句
  19. 【C#】关于委托和事件
  20. 马斯洛人类需求五层次理论(Maslow's Hierarchy of Needs)

热门文章

  1. Softmax算法:逻辑回归的扩展
  2. java 泛型接口 范型类 范型方法_泛型类、泛型方法、泛型接口
  3. 爬虫数据采集技术趋势-智能化解析
  4. Awk by Example--转载
  5. 如何看linux是32位还是64位--转
  6. BEA WebLogic平台下J2EE调优攻略--转载
  7. 强监管下 协议支付会是互金平台救命稻草?(协议支付是代扣协议的升级版)
  8. 【大数据风控体系】理想大数据风控体系
  9. 【沟通交流】弱关系向强关系的转变
  10. 360金融CEO徐军发明:资金饥渴分模型