本教程操作环境:windows7系统、java10版,DELL G3电脑。
编译时编译器会做很多操作,我们用javap-v反编译Season.class文件,可以看到很多细节。
1、枚举是继承了抽象类Enum的类。
Seasonextendsjava.lang.Enum<Season>
2、通过一段静态代码块初始化枚举。
static{}; descriptor:()V flags:ACC_STATIC Code: stack=4,locals=0,args_size=0 0:new#4//classio/github/yehongzhi/user/redisLock/Season 3:dup 4:ldc#7//StringSPRING 6:iconst_0 7:invokespecial#8//Method"<init>":(Ljava/lang/String;I)V 10:putstatic#9//FieldSPRING:Lio/github/yehongzhi/user/redisLock/Season; 13:new#4//classio/github/yehongzhi/user/redisLock/Season 16:dup 17:ldc#10//StringSUMMER 19:iconst_1 20:invokespecial#8//Method"<init>":(Ljava/lang/String;I)V 23:putstatic#11//FieldSUMMER:Lio/github/yehongzhi/user/redisLock/Season; 26:new#4//classio/github/yehongzhi/user/redisLock/Season 29:dup 30:ldc#12//StringAUTUMN 32:iconst_2 33:invokespecial#8//Method"<init>":(Ljava/lang/String;I)V 36:putstatic#13//FieldAUTUMN:Lio/github/yehongzhi/user/redisLock/Season; 39:new#4//classio/github/yehongzhi/user/redisLock/Season 42:dup 43:ldc#14//StringWINTER 45:iconst_3 46:invokespecial#8//Method"<init>":(Ljava/lang/String;I)V 49:putstatic#15//FieldWINTER:Lio/github/yehongzhi/user/redisLock/Season; 52:iconst_4 53:anewarray#4//classio/github/yehongzhi/user/redisLock/Season 56:dup 57:iconst_0 58:getstatic#9//FieldSPRING:Lio/github/yehongzhi/user/redisLock/Season; 61:aastore 62:dup 63:iconst_1 64:getstatic#11//FieldSUMMER:Lio/github/yehongzhi/user/redisLock/Season; 67:aastore 68:dup 69:iconst_2 70:getstatic#13//FieldAUTUMN:Lio/github/yehongzhi/user/redisLock/Season; 73:aastore 74:dup 75:iconst_3 76:getstatic#15//FieldWINTER:Lio/github/yehongzhi/user/redisLock/Season; 79:aastore 80:putstatic#1//Field$VALUES:[Lio/github/yehongzhi/user/redisLock/Season; 83:return
这段静态代码块的作用就是生成四个静态常量字段的值,还生成了$VALUES字段,用于保存枚举类定义的枚举常量。
3、关于values()方法,这是一个静态方法,作用是返回该枚举类的数组,底层实现原理,其实是这样的。
publicstaticio.github.yehongzhi.user.redisLock.Season[]values(); Code: 0:getstatic#1//Field$VALUES:[Lio/github/yehongzhi/user/redisLock/Season; 3:invokevirtual#2//Method"[Lio/github/yehongzhi/user/redisLock/Season;".clone:()Ljava/lang/Object; 6:checkcast#3//class"[Lio/github/yehongzhi/user/redisLock/Season;" 9:areturn原文来自:https://www.py.cn
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容