java之enum枚举分析
写在前面枚举类在工作中还挺常用的本文一起来看下。1枚举类的使用定义枚举类packagecom.demo.xx;publicenumDD{YOUNG(2),OLD(100);privateintage;privateDD(intage){this.ageage;}OverridepublicStringtoString(){returnDD{ageage};}}测试packagecom.demo.xx;importjava.util.Arrays;publicclassLoadByClassLoader{publicstaticvoidmain(String[]args)throwsException{// 获取枚举类finalDDoldDD.OLD;// 获取在数组中的序号从索引0开始System.out.println(ordinal:old.ordinal());// 返回数组形式的枚举类们System.out.println(DD.values()Arrays.asList(DD.values()));// 通过字面量获取对应的枚举对象finalDDold1DD.valueOf(OLD);System.out.println(old1);finalStringnameold1.name();// 获取字面量System.out.println(old1.name: name);}}运行[INFO] --- exec:3.6.3:exec (default-cli) syncLockTest --- ordinal:1 DD.values()[DD{age2}, DD{age100}] DD{age100} old1.name: OLD [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------至于为什么可以这样子用我们通过原理部分来看下。2枚举类的原理编译枚举类dell9020DESKTOP-C3DTETT MINGW64 /d/test/xxxx $ javac -d . DD.javajavap查看字节码:$ javap com.demo.xx.DD Compiled from DD.java public final class com.demo.xx.DD extends java.lang.Enumcom.demo.xx.DD { public static final com.demo.xx.DD YOUNG; public static final com.demo.xx.DD OLD; public static com.demo.xx.DD[] values(); public static com.demo.xx.DD valueOf(java.lang.String); public java.lang.String toString(); static {}; }从字节码中可以看出枚举其实是一种语法糖编译器帮助我们做了很多的事情比如继承了java.lang.Enum,生成了枚举对应的常量以及静态代码块其实常量的初始化是在静态代码块完成的相当于如下代码publicclassDDextendsjava.lang.Enumcom.demo.xx.DD{// YOUNG(2),OLD(100);publicstaticfinalcom.demo.xx.DDYOUNG;publicstaticfinalcom.demo.xx.DDOLD;static{com.demo.xx.DDYOUNGnewDD(2);com.demo.xx.DDOLDnewDD(100);}privateintage;privateDD(intage){this.ageage;}OverridepublicStringtoString(){returnDD{ageage};}}所以枚举是一种基于常量和静态代码块的语法糖所以其是在初始化阶段完成对象创建的即加载完成后就会在堆中占有一块内存了。3枚举类的使用需要注意的点因为枚举类加载就会创建相关对象所以会占用堆内存空间如果枚举比较多的话最好就不要使用枚举了。写在后面参考文章列表
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2441667.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!