public enum ColorEnumTest { RED, GREEN, BLANK, YELLOW;}
然后我们再将上面的那段代码编译为字节码 , 具体内容如下:
public final class ColorEnumTest extends java.lang.Enum<ColorEnumTest> { public static final ColorEnumTest RED; public static final ColorEnumTest GREEN; public static final ColorEnumTest BLANK; public static final ColorEnumTest YELLOW; public static ColorEnumTest[] values(); public static ColorEnumTest valueOf(java.lang.String); static {};}
从上述结果可以看出枚举类最终会被编译为被 final 修饰的普通类 , 它的所有属性也都会被 static 和 final 关键字修饰 , 所以枚举类在项目启动时就会被 JVM 加载并初始化 , 而这个执行过程是线程安全的 , 所以枚举类也是线程安全的类 。
小贴士:代码反编译的过程是先用 javac 命令将 java 代码编译字节码(.class) , 再使用 javap 命令查看编译的字节码 。枚举比较小技巧我们在枚举比较时使用 == 就够了 , 因为枚举类是在程序加载时就创建了(它并不是 new 出来的) , 并且枚举类不允许在外部直接使用 new 关键字来创建枚举实例 , 所以我们在使用枚举类时本质上只有一个对象 , 因此在枚举比较时使用 == 就够了 。
并且我们在查看枚举的 equlas() 源码会发现 , 它的内部其实还是直接调用了 == 方法 , 源码如下:
public final boolean equals(Object other) { return this==other;}
总结本文我们介绍了枚举类的 7 种使用方法:常量、switch、枚举中添加方法、覆盖枚举方法、实现接口、在接口中组织枚举类和使用枚举集合等 , 然后讲了如果不使用枚举类使用 int 类型和 String 类型存在的一些弊端:语义不够清晰、容易被修改、存在被误用的风险 , 所以我们在适合的环境下应该尽量使用枚举类 。并且我们还讲了枚举类的使用场景——单例 , 以及枚举类为什么是安全的 , 最后我们讲了枚举比较的小技巧 , 希望本文对你有帮助 。【java枚举类型,为什么强烈推荐使用?看看它的7种场景方法】
推荐阅读
- Java中读取File文件内容转为String类型
- 淘宝店铺分几种 淘宝店铺分为几种类型
- 在 JavaScript 中替换所有指定字符 3 种方法
- 搞懂 面向对象 的核心思想,JAVA中封装、包和访问权限的知识点
- 您应该了解的顶级JavaScript库
- javascript自学记录:递归
- 阿里的垃圾怎么回收?Java G1源码分析与调优手册
- JavaScript代码整洁之道
- 陈香铁观音的制作工序,安溪铁观音的三大类型
- 一文带你弄懂 Java 动态代理