定义:
枚举是指一组固定常量组成合法值的类型

首先是固定常量,一组有限常量集,比如一年的四个季节,太阳系的行星。其次,枚举是一种特殊的类型,定义了自己的一些规则,这些规则是建立在类规则之上的,是一种 type。

性质:
枚举是真正的 final,客户端不允许创建枚举类的实例,也不能对其进行拓展

Java 枚举本质上是 int 值。只能通过公有的静态 final 域为枚举类导出实例。

public enum Color {
    GREEN,RED,BLUE,GRAY;
}
实际上枚举的完整的结构为:

public enum Color {
    GREEN,RED,BLUE,GRAY;
    Color() {
    }
如果在 Color() 构造方法之前加上 private 则不会有任何问题。如果加上 public 等修饰符,IDE 会报错,也就是编译器不会通过。其实这是枚举与类的根本区别,就在于构造方法私有。

当然如果仅仅是构造方法私有,不再提供构造方法了,也就是说外界不能 new 实例,如果仅从这样看,那枚举就没有什么用了。 
其实我们用过枚举的都知道,GREEN、RED 都是 Color 型的实例,其实枚举也可以看作自动处理了一些东西,帮助简化了代码,翻译成类大致就是:【与单例模式的饿汉式代码一样!!】

public class Color {

public static final Color GREEN = new Color(),
            RED = new Color(),
            BLUE = new Color(),
            GRAY = new Color();

private Color() {
    }
}
如果从这种角度去看,枚举的用法就不难理解了,也就是枚举类不给外界实例化的机会,只能它自己实例化,而一个枚举类的所有实例就只有枚举前面分号前的那几个,其他地方不允许创建。
原文:https://blog.csdn.net/lishuangling21/article/details/71398925

实践可见:《effective java 》第3条--枚举类型实现单例模式

枚举类型为什么能实现单例模式?相关推荐

  1. 深度分析Java的枚举类型——枚举的线程安全性及序列化问题

    点击关注,快速进阶高级架构师 作者:Hollis 写在前面:Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为 ...

  2. java 枚举使用简书_java枚举类型使用和详解

    1.定义 An enum type is a special data type that enables for a variable to be a set of predefined const ...

  3. 枚举类型enum用法_Java枚举深度解读,看这篇就够了

    作者 | 涛GuoGuo的跟屁虫丶博Ke 来源 | urlify.cn/aaamQf 66套java从入门到精通实战课程分享 Java枚举 1.枚举类概念的理解与定义 一个类的对象是有限个,确定的,我 ...

  4. java基础(十一) 枚举类型

    枚举类型Enum的简介 1.什么是枚举类型 枚举类型: 就是由一组具有名的值的有限集合组成新的类型.(即新的类). 好像还是不懂,别急,咱们先来看一下 为什么要引入枚举类型 在没有引入枚举类型前,当我 ...

  5. java中的枚举类_java中的枚举类型

    java中为了对参数类型使用限定,引入了泛型,实现了在编译期对参数类型是否合法的判断.同样,java为了对参数的值的限定,引入了枚举类,实现了在编译期对参数的值是否合法的判断. 首先我们用自定义类的方 ...

  6. Effective Java之对于实例控制,枚举类型优于readResolve(七十七)

    Object readResolve() 这个方法会紧挨着readObject()之后被调用,该方法的返回值将会代替原来反序列化的对象,而原来readObject()反序列化的对象将会立即丢弃. re ...

  7. Java枚举类型(enum)详解

    文章目录 理解枚举类型 枚举的定义 枚举实现原理 枚举的常见方法 Enum抽象类常见方法 编译器生成的Values方法与ValueOf方法 枚举与Class对象 枚举的进阶用法 向enum类添加方法与 ...

  8. 深度分析 Java 的枚举类型:枚举的线程安全性及序列化问题(转)

    写在前面: Java SE5 提供了一种新的类型 Java的枚举类型,关键字 enum 可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能 ...

  9. java基础篇(11) 枚举类型

    枚举类型Enum的简介 1.什么是枚举类型 枚举类型: 就是由一组具有名的值的有限集合组成新的类型.(即新的类). 好像还是不懂,别急,咱们先来看一下 为什么要引入枚举类型 在没有引入枚举类型前,当我 ...

最新文章

  1. 深入理解WMS(四):从WMS的角度分析Activity之间的关系
  2. Linux 命令之 which -- 查找并显示给定命令的绝对路径(查找命令的位置/查询命令的位置/搜索命令的位置/查看命令的位置)
  3. java学习文档_资深程序员带你深入了解JAVA知识点,实战篇,PDF文档
  4. 读小米的《参与感》书的摘录(一),与大家分享!
  5. 从Encoder到Decoder实现Seq2Seq模型
  6. Python 实现邮件发送功能(进阶)
  7. 2017.3.30 时态同步 失败总结
  8. SET CONSTRAINTS DEFERRED | IMMEDIATE
  9. 开源文化依旧熠熠生辉 —— 在openEuler社区,有技术、有idea,你就是主角
  10. Spring - Netty (整合)
  11. JAVA实现成绩统计之及格率和优秀率
  12. 大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构 @推荐与计算广告系列
  13. script加密解密工具下载
  14. 中国废弃电器电子产品回收处理行业发展格局与投资风险可行性报告2022~2027年
  15. Word/WPS 文本转换成表格
  16. 正则表达式应用——实例应用
  17. 广州华锐互动提供商场AR大屏互动制作一站式解决方案
  18. Coggle推荐系统学习任务1:推荐系统基础
  19. 棋牌游戏网站分析——远航游戏中心
  20. C/C++语言——数据类型

热门文章

  1. mkfifo命名管道+fork实现文件拷贝
  2. kafka源码分析-consumer的分区策略
  3. thymeleaf frame 局部刷新_明日方舟公开招募标签强制刷新 黑赫拉格加入
  4. 10张图带你彻底搞懂什么是限流、熔断、服务降级
  5. 计算机文件云同步,电脑文件在iCloud 同步到云端之前就在电脑… - Apple 社区
  6. VS2013与有道词典冲突
  7. 拼多多、饿了么、蚂蚁金服Java面试题大集合
  8. c语言递归函数编程,c语言递归函数的使用方法
  9. htmlunit(二)
  10. 【动手撸深度学习】AI学子借问显卡何处有,牧童遥指我这里!(全面亲测)