枚举基类Enum详解
本文主要是对枚举类型的基类Enum类做一个介绍:
首先,Enum类位于java.lang包下,根据类的介绍可以发现,Enum类是Java中所有枚举类的父类,将枚举作为一个set或者Map的keys来使用具有很高的效率。
Enum类是一个抽象类,实现了Comparable和Serializable接口,在类中只有两个成员变量name和ordinal,分别表示枚举的名字和序号均为private,但是提供了两个方法来返回这两个字段分别是name()和ordinal();
Enum类提供一个为一个构造方法,传入两个参数,分别是name和ordinal,并将这两个值赋给类成员变量name和ordinal,但是这个构造方法是protected类型,程序员不能调用,就不详细说了。
Enum类具有所有类都具有的方法toString和hashCode和equals,这个toString()方法在这里返回类成员变量name的值。
接下来提供一个方法叫做clone(),这个方法没有做任何操作,只是抛出一个异常CloneNotSupportedException,这个方法主要是为了防止枚举类型被clone(设计模式中的拷贝模式),这样做就可以保证枚举是单例的。
getDeclaringClass()方法用来返回一个枚举常量所在枚举类型的类对象,可以判断两个枚举常量是否属于同一个枚举类e1.geDeclaringClass() == e2.getDeclaring.class();
valueOf();这个方法的作用是:将枚举e中名字为name的常量返回,比如
public enum Color{
RED,BLUE
}
public class Client{
public void client(){
Color red = Color.valueOf("RED")
}
}
Enum类还提供了一个finalize()方法,这个方法没有实现任何代码,这个方法的作用是为了保证枚举不会拥有finalize方法,finalize方法主要是为了在垃圾回收对象的时候做一些额外的清理工作,详情请去看java的垃圾回收机制
Enum类提供了readObject和readObjectNoData两个方法,这两个方法只抛出了异常,它的作用是为了防止枚举类型被反序列化。
为什么枚举要禁止clone和禁止反序列化呢?
因为枚举是一个基于底层实现的一个单例模式,但是单例模式通常可以通过clone和反序列化来实现产生一个单例类多个不同的对象,在这里禁止clone和反序列化就能避免这种情况发生,详情请看设计模式中的单例模式。
枚举基类Enum详解的更多相关文章
- qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)
原博主博客地址:http://blog.csdn.net/qq21497936本文章博客地址:http://blog.csdn.net/qq21497936/article/details/78516 ...
- moviepy音视频剪辑:视频剪辑基类VideoClip详解
☞ ░ 前往老猿Python博文目录 ░ 一.概述 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>和<moviepy音视频剪辑:moviepy中的剪辑基类Cl ...
- moviepy音视频剪辑:moviepy中的剪辑基类Clip详解
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一. ...
- moviepy音视频开发:音频剪辑基类AudioClip详解
☞ ░ 前往老猿Python博文目录 ░ 一.背景知识介绍 1.1.声音三要素: 音调:人耳对声音高低的感觉称为音调(也叫音频).音调主要与声波的频率有关.声波的频率高,则音调也高. 音量:也就是响度 ...
- Java 枚举(enum) 详解7种常见的用法
Java 枚举(enum) 详解7种常见的用法 来源 https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的类型— ...
- Android中Application类的详解:
Android中Application类的详解: 我们在平时的开发中,有时候可能会须要一些全局数据.来让应用中的全部Activity和View都能訪问到.大家在遇到这样的情况时,可能首先会想到自定义一 ...
- 《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)
1.简介 上一篇宏哥介绍了如何设计支持不同浏览器测试,宏哥的方法就是通过来切换配置文件设置的浏览器名称的值,来确定启动什么浏览器进行脚本测试.宏哥将这个叫做浏览器引擎类.这个类负责获取浏览器类型和启动 ...
- UML类图详解_关联关系_一对多
对于一对多的示例,可以想象一个账户可以多次申购.在申购的时候没有固定上限,下限为0,那么就可以使用容器类(container class)来搞,最常见的就是vector了. 下面我们来看一个“一对多” ...
- UML类图详解_关联关系_多对一
首先先来明确一个概念,即多重性.什么是多重性呢?多重性是指两个对象之间的链接数目,表示法是“下限...上限”,最小数据为零(0),最大数目为没有设限(*),如果仅标示一个数目级上下限相同. 实际在UM ...
随机推荐
- [KMP][HDU3336][Count the string]
题意 计算所有S的前缀在S中出现了几次 思路 跟前缀有关的题目可以多多考虑KMP的NEXT数组 #include <cstdio> #include <cstring> #in ...
- 字符串最小表示法 O(n)算法
网上看了这篇文章后还是感觉有些地方讲的没有详细的证明所以添加了一点 红色字是博主写的 求字符串的循环最小表示: 上面说的两个字符串同构的,并没有直接先求出Min(s),而是通过指针移动,当某次匹配串长 ...
- differ比较两个字符串的差异
"abcde","abdefk" ---->-c,+f,+k "aba","aababb" -----&g ...
- HDU 1073 - Online Judge
模拟评测机判断答案 先判断有没有不一样的 有的话再提取出 有效子列 看看有没有错的 #include <iostream> #include <cstdio> #include ...
- 设计模式--委托模式C++实现
原文章地址:http://www.cnblogs.com/zplutor/archive/2011/09/17/2179756.html [委托模式 C++实现] 我对.Net的委托模型印象很深刻,使 ...
- python-整理--使用IDE
如何使用python的IDE 安装好python3.4之后,默认有一个叫IDLE,就是目录lib/idlelib之下,是一个简单实用的工具. 在VS2013上安装一个插件就可以使用VS当IDE了.插件 ...
- docker 使用Data Volume 共享文件
Adding a data volume You can add a data volume to a container using the -v flag with the docker run ...
- MVC 后台DataTable 前台遍历
/// <summary> /// 多级审批流展示 /// </summary> /// <returns></returns> public Acti ...
- javascript总结--2014-04-17
HTML DOM Function Data http://www.oschina.net/translate/learning-javascript-design-patterns?cmp& ...
- Delphi调用安装驱动sys的单元
unit SysDriver; interface uses windows, winsvc; // jwawinsvc; Type TSysDriver = class(TObject) priva ...