最近有以前
的学生跟我说工作现在不好找,我就对他说,要相信自己的能力,别人一个并发都不了解的,连框架都要照着百度搭的人都能做架构师,你怕什么呢?只要自己掌握的技术够深,没有你找不到的工作。
这是题外话了,下面我来给大家讲下关于枚举的生命周期以及应用枚举的优势。
背景:
关于在一个项目中项目经理将枚举常量都存储在数据库(所谓的数据词典)中,然后在读取出来缓存到缓存中,所引发的思考。
质疑:
想必能读懂我写的东西的人应该都知道,常量数据被读取到缓存当中后,你势必不会去改变缓存中的常量内容,那么读取到缓存中的数据一直都会占据内存,不会被java垃圾回收机制捕捉而被释放。
下面我们看下java 枚举类的使用机制及其优势:
解析:
1.enum 枚举是java 1.5以后出来的产物,1.5以前都是使用public static final来定义我们的常量,为什么Sun会推出Enum枚举呢?因为,我们单纯的public static final常量在很多时候,我们都无法准确的了解它的意义,比如定义了一个int类型的常量1,代表性别男,那么如果没有注释,谁知道这代表什么意义呢?而且谁能保证开发人员不会滥用这些常量呢?
2.如何定义枚举:这个,是个学编程的都会吧,这里略。。。
3.枚举的分析:
我们可以去看下jdk源码,Enum枚举构造方法都是protected,这说明我们的枚举其实都是单例模式的,而且在使用时才会在运行中创建我们的枚举对象,很多时候,我们都是在{ }代码块中进行使用枚举,那么它的优势就显示出来了!
在这里,大家应该就比较清楚了,一旦枚举在程序中使用完毕,那么创建出来的枚举对象就会失去引用,如果该枚举类没有继续被引用,那么java回收机制就会有可能会将其回收,这样就不会刻意占据我们的内存,枚举的好处不言自明。
这是题外话了,下面我来给大家讲下关于枚举的生命周期以及应用枚举的优势。
背景:
关于在一个项目中项目经理将枚举常量都存储在数据库(所谓的数据词典)中,然后在读取出来缓存到缓存中,所引发的思考。
质疑:
想必能读懂我写的东西的人应该都知道,常量数据被读取到缓存当中后,你势必不会去改变缓存中的常量内容,那么读取到缓存中的数据一直都会占据内存,不会被java垃圾回收机制捕捉而被释放。
下面我们看下java 枚举类的使用机制及其优势:
解析:
1.enum 枚举是java 1.5以后出来的产物,1.5以前都是使用public static final来定义我们的常量,为什么Sun会推出Enum枚举呢?因为,我们单纯的public static final常量在很多时候,我们都无法准确的了解它的意义,比如定义了一个int类型的常量1,代表性别男,那么如果没有注释,谁知道这代表什么意义呢?而且谁能保证开发人员不会滥用这些常量呢?
2.如何定义枚举:这个,是个学编程的都会吧,这里略。。。
3.枚举的分析:
我们可以去看下jdk源码,Enum枚举构造方法都是protected,这说明我们的枚举其实都是单例模式的,而且在使用时才会在运行中创建我们的枚举对象,很多时候,我们都是在{ }代码块中进行使用枚举,那么它的优势就显示出来了!
在这里,大家应该就比较清楚了,一旦枚举在程序中使用完毕,那么创建出来的枚举对象就会失去引用,如果该枚举类没有继续被引用,那么java回收机制就会有可能会将其回收,这样就不会刻意占据我们的内存,枚举的好处不言自明。
4.Enum枚举还可以自己定义方法,可以进行相关运算得到自己想要的结果。
如果有写得不对的地方,欢迎吐槽!