这一次,彻底弄懂 Java 字节码文件!(15)

那么 , 这些十六进制是怎么和下面的助记符对应的呢?

我们通过jclasslib工具(字节码查看工具 , 支持IDEA插件形式安装)查看时 , 点击助记符的链接会跳到Oracle官网可查看具体详细解释 。 第一个助记符: 0: aload_0 打开链接可以看到:

链接地址: 具体解释内容所示: aload_n Operation Loadreferencefrom local variable Format aload_n Forms aload_0= 42 ( 0 x2a) //通过这里就能直接看到aload_0对应的十进制是42 , 转换为十六进制就是0x2a , 对应字节码文件中的2A aload_1= 43 ( 0 x2b) aload_2= 44 ( 0 x2c) aload_3= 45 ( 0 x2d) Description Thenmustbean index intothe local variable array of thecurrentframe(§ 2.6 ).The local variableatnmustcontainareference.Theobjectref in the local variableatn is pushedontotheoperandstack. 这个n必须是一个到当前栈帧局部变量数组的一个索引 , 位于n位置上的局部变量会包含一个引用 , 位于n位置上的局部变量的这个引用会被推送到栈顶(准备进行操作) 。 第二个助记符: 1 :invokespecial #1 //Methodjava/lang/Object.\"init\":()V 连接地址:https: //docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.invokespecial invokespecial Operation Invokeinstancemethod;specialhandling for superclass private and instance initialization methodinvocations Format invokespecial indexbyte1 indexbyte2 Forms invokespecial= 183 ( 0 xb7) OperandStack ...objectref[arg1[arg2...

推荐阅读