使用javap打印常量表和计算字节码指令
javap 介绍
javap是 JDK自带的一个工具,可以将 class文件反编译成字节码,它并没有将class文件反编译成 java文件,但是依然反编译成程序员能读的格式。
1,编译源程序
源程序(我使用的是myeclipse):
package t;public class TestClass{private int m;public int inc(){return m+1;}
}
在myeclipse中,编译源程序:
必须确保你的myeclipse中菜单-->project(项目)--> build automatically (自动构建)这一项被选中打勾这样你写代码的时候,按下ctrl+S(保存) ,系统就会自动帮你编译,就是生成了TestClass.class字节码文件,才能使用javap
查看TestClass.class的文件位置
2,cmd 进入class目录, javap -verbose classname
书中代码清单6-2和6-4
Microsoft Windows [版本 10.0.17763.316]
(c) 2018 Microsoft Corporation。保留所有权利。C:\Users\ee>
C:\Users\ee>cd Workspaces/MyEclipse 10/TEST/bin/t/C:\Users\ee\Workspaces\MyEclipse 10\TEST\bin\t>javap -verbose TestClass
警告: 二进制文件TestClass包含t.TestClass
Classfile /C:/Users/ee/Workspaces/MyEclipse 10/TEST/bin/t/TestClass.classLast modified 2019-3-7; size 357 bytesMD5 checksum 63be3f690d4eb235eaf51ab7529a6462Compiled from "TestClass.java"
public class t.TestClassSourceFile: "TestClass.java"minor version: 0major version: 51flags: ACC_PUBLIC, ACC_SUPER
Constant pool:#1 = Class #2 // t/TestClass#2 = Utf8 t/TestClass#3 = Class #4 // java/lang/Object#4 = Utf8 java/lang/Object#5 = Utf8 m#6 = Utf8 I#7 = Utf8 <init>#8 = Utf8 ()V#9 = Utf8 Code#10 = Methodref #3.#11 // java/lang/Object."<init>":()V#11 = NameAndType #7:#8 // "<init>":()V#12 = Utf8 LineNumberTable#13 = Utf8 LocalVariableTable#14 = Utf8 this#15 = Utf8 Lt/TestClass;#16 = Utf8 inc#17 = Utf8 ()I#18 = Fieldref #1.#19 // t/TestClass.m:I#19 = NameAndType #5:#6 // m:I#20 = Utf8 SourceFile#21 = Utf8 TestClass.java
{public t.TestClass();flags: ACC_PUBLICCode:stack=1, locals=1, args_size=10: aload_01: invokespecial #10 // Method java/lang/Object."<init>":()V4: returnLineNumberTable:line 3: 0LocalVariableTable:Start Length Slot Name Signature0 5 0 this Lt/TestClass;public int inc();flags: ACC_PUBLICCode:stack=2, locals=1, args_size=10: aload_01: getfield #18 // Field m:I4: iconst_15: iadd6: ireturnLineNumberTable:line 7: 0LocalVariableTable:Start Length Slot Name Signature0 7 0 this Lt/TestClass;
}C:\Users\ee\Workspaces\MyEclipse 10\TEST\bin\t>
还有一些javac的东西,没遇到,懒得写,附上别人博客