通过字节码深入分析java的枚举类型enum

 1.      Java中的枚举究竟是什么鬼?

如果从C++转java的话,会发现一个现象那就是在java中的枚举跟C++区别非常大,甚至可以说除了名字一样外,其他实现等都是非常不同的,在C++枚举更像个常数,而java的枚举更靠近正常的普通成员内部类。让我们从字节码角度看看java中的enum究竟是什么东西吧

源码:

    public enum book{

        BOOK1,BOOK2,BOOK3

}

字节码:

  Last modified 2017-7-23; size 1026 bytes

  MD5 checksum 338ca8c3927b424ae7b0acacb42fd28b

  Compiled from "ChildTest.java"

public final class ChildTest$book extendsjava.lang.Enum<ChildTest$book>

  minor version: 0

  major version: 52

  flags:ACC_PUBLIC, ACC_FINAL, ACC_SUPER, ACC_ENUM

Constantpool:

   #1 = Class              #2             // ChildTest$book

   #2 = Utf8              ChildTest$book

   #3 = Class              #4             // java/lang/Enum

   #4 = Utf8               java/lang/Enum

   #5 = Utf8               BOOK1

   #6 = Utf8               LChildTest$book;

   #7 = Utf8               BOOK2

   #8 = Utf8               BOOK3

   #9 = Utf8               ENUM$VALUES

  #10 = Utf8               [LChildTest$book;

  #11 = Utf8               <clinit>

  #12 = Utf8               ()V

  #13 = Utf8               Code

  #14 = String             #5             // BOOK1

  #15 = Methodref          #1.#16         //ChildTest$book."<init>":(Ljava/lang

/String;I)V

  #16 = NameAndType        #17:#18        //"<init>":(Ljava/lang/String;I)V

  #17 = Utf8               <init>

  #18 = Utf8               (Ljava/lang/String;I)V

  #19 = Fieldref           #1.#20         // ChildTest$book.BOOK1:LChildTest$boo

k;

  #20 = NameAndType        #5:#6          // BOOK1:LChildTest$book;

  #21 = String             #7             // BOOK2

  #22 = Fieldref           #1.#23         // ChildTest$book.BOOK2:LChildTest$boo

k;

  #23 = NameAndType        #7:#6          // BOOK2:LChildTest$book;

  #24 = String      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值