* 这是JDK8编译的字节码
* 一个字节8bit,可以储存两个16进制数
cafe babe //魔数,用于确认这是一个Class文件
0000 //次版本号(一般是0没启用)
0034 //主版本号 52代表JDK8
0013 //常量池计数器,18个常量(19去掉0表示空引用,还有18个)
0a //第一个常量 CONSTANT_MethodRef_info --java/lang/Object <init> void
0004
000f
09 //第二个常量 CONSTANT_FieldRef_info --jvmClass/jvmClass name Ljava/lang/String;
0003
0010
07 //第三个常量 CONSTANT_class_info --jvmClass/jvmClass
0011
07 //第四个常量 CONSTANT_class_info --java/lang/Object
0012
01 //第五个常量 CONSTANT_UTF8_info
0004 (字符串长度4)
6e61 6d65(十六进制转成字符串就是name)
01 //第六个常量 CONSTANT_UTF8_info
0012
4c6a 6176 612f 6c61 6e67 2f53 7472 696e 673b(Ljava/lang/String;)
01 //第七个常量 CONSTANT_UTF8_info
0006
3c69 6e69 743e (<init>)
01 //第八个常量 CONSTANT_UTF8_info
0003
2829 56 ()V (表示方法的返回值为void)
01 //第九个常量 CONSTANT_UTF8_info
0004
436f 6465 (Code)
01 //第十个常量 CONSTANT_UTF8_info
000f
4c69 6e65 4e75 6d62 6572 5461 626c 65 (LineNumberTable 代码的行号,异常定位行号用到了)
01 //第十一个常量 CONSTANT_UTF8_info
0007
6765 744e 616d 65(getName 方法名称)
01 //第十二个常量 CONSTANT_UTF8_info
0014
2829 4c6a 6176 612f 6c61 6e67 2f53 7472 696e 673b(Ljava/lang/String;)
01 //第十三个常量 CONSTANT_UTF8_info
000a
536f 7572 6365 4669 6c65(SourceFile 源文件标识)
01 //第十四个常量 CONSTANT_UTF8_info
000d
6a76 6d43 6c61 7373 2e6a 6176 61(jvmClass.java 文件名)
0c //第十五个常量 CONSTANT_NameAndType_info
0007
0008
0c //第十六个常量 CONSTANT_NameAndType_info
0005
0006
01 //第十七个常量 CONSTANT_UTF8_info
0011
6a 766d 436c 6173 732f 6a76 6d43 6c61 7373(jvmClass/jvmClass 全包名+全限定名)
01 //第十八个常量 CONSTANT_UTF8_info
0010
6a61 7661 2f6c 616e 672f 4f62 6a65 6374(java/lang/Object)
0021 //类的访问标识 ACC_PUBLIC + ACC_SUPER
0003 //类索引(jvmClass/jvmClass)
0004 //父类索引(java/lang/Object)
0000 //没有实现任何接口,所以为0
0001 //字段表计数器,有一个字段(这里指类级字段或实例级字段,不包括方法中的局部变量)
0002 //private
0005 //name
0006 //Ljava/lang/String;
0000 //没有其他属性了
0002 //方法表计数器,有两个方法
0001 //public
0007 //<init>
0008 //void
0001 //一个属性
0009 //Code属性
0000 001d //属性长度29
0001 //最大栈深度1
0001 //最大局部变量槽的数量1
0000 0005 //字节码指令是5
2a //aload_0 将第一个引用类型本地变量推送至栈顶
b7 //invokespecial 调用超类构造方法,实例初始化方法,私有方法
00 //nop 什么都不做
01 //aconst_null 将null推送至栈顶
b1 //return 从当前方法返回void
0000 //异常信息为空
0001 //一个属性
000a //LineNumberTable 主要用于描述Java源码与字节码行号对应关系
0000 0006 //属性长度为6
0001 //有一个属性
0000 //字节码行号
0003 //代码的行号
0001 //public
000b //getName
000c //Ljava/lang/String;
0001 //有一个属性
0009 //Code属性
0000 001d //Code属性长度
0001 //最大栈深度
0001 //最大局部变量槽
0000 0005 //五个指令码
2a
b4
00
02
b0
0000 //异常信息为空
0001 //一个属性
000a //LineNumberTable
0000 0006 //属性长度为6
0001 //有一个属性
0000 //字节码行号
0007 //代码的行号
0001 //属性表计数器,一个属性
000d //SourceFile 记录源文件名称
0000 0002 //两个长度
000e //jvmClass.java