java中的枚举类型是jdk1.5新增的一个东西,其本质是一个java.lang.Enum类的子类,每个枚举项是一个静态常量对象,由编译器为每个枚举项分配ordinal和name,其中ordinal是枚举项声明时候的顺序,从0开始,name是枚举项的名称,可以通过同名无参方法name()和ordinal()来获取,这两个方法都是final的。

我们还可以通过类型的静态valueOf方法传入一个字符串返回字符串对应的枚举值,需要说明的是每个枚举值在内存中只有一份,并且禁止被clone。Enum类对equals方法的实现也是直接比较地址值(用==来比较),并设置成了final禁止被继承,同样hashCode()也是final的。

既然是类和对象,那么枚举就具备类与对象的一切功能,可以定义实例变量和方法,可以实现接口,可以声明抽象方法然后在每个枚举值中实现(有点类似于匿名类),也可以修改编译器默认调用的构造方法,来实现定制化的枚举需求。

因为枚举类和枚举项本质就是类与对象,加上其独特的语法糖和全局唯一的性质,它可以被用来实现线程安全的单例。这也是《effective java》中推荐的单例模式实现方案。

最新文章

  1. Flume NG Getting Started(Flume NG 新手入门指南)
  2. web前端基础知识-(三)JavaScript基本操作
  3. java 深入技术五 (泛型)
  4. Codeforces Round #FF(255) DIV2
  5. Maven(二)使用eclipse创建maven多模块项目
  6. Request获取URL地址相应方法
  7. DDD:如何更好的使用值对象
  8. ESB概述
  9. Oracle查询出最最近一次的一条记录
  10. jquery的API查看 / prepend、prependTo、append、appendTo的用法
  11. C# 之 AES加密源码
  12. 通常编译亲测56Y国际象棋源代码,精仿56Y国际象棋完整的源代码下载!
  13. java泛型探索——小特性
  14. Data Lake Analytics + OSS数据文件格式处理大全
  15. C语言面试程序阅读整理
  16. PHP7--PHP的一次重大变革
  17. linux下批量查找UTF-8的BOM文件,并去除BOM
  18. Crontab和sudo中无法使用TensorFlow ImportError libcublas.so.9.0
  19. [面试题]vi/vim快捷键及面试题系列
  20. easyui Dialog 去边框

热门文章

  1. 13_日期时间、Math、枚举
  2. 本地Pycharm将spark程序发送到远端spark集群进行处理
  3. py kafka
  4. 其实每个行业都有各自的辛苦,好的程序员并不累,他们乐此不疲(见过太多在职位事业、人生方向上随转如流的人,累了疲乏了就去做别的事情了。必须有自己的坚守和立足的点,自我驱动,否则沦为在别人的体制制度中被驱赶一生)good
  5. SpringCloud Hystrix/Feign 整合 Hystrix 后首次请求失败解决方案
  6. MySQL AND 和 OR 联合使用带来的坑
  7. Unity性能优化-DrawCall
  8. Trie树(字典树)-题解 P2580 【于是他错误的点名开始了】
  9. jQuery入门简述
  10. Redis 测试 数据类型