本文共 1109 字,大约阅读时间需要 3 分钟。
通过反编译生成的字节码文件,我们可以深入的了解java代码的工作机制。但是,自己分析类文件结构太麻烦了!除了使用第三方的jclasslib工具之外,oracle官方也提供了工具:javap。
javap是jdk自带的反解析工具。它的作用就是根据class字节码文件,反解析出当前类对应的code区 (字节码指令)、局部变量表、异常表和代码行偏移量映射表、常量池等信息。
通过局部变量表,我们可以查看局部变量的作用域范围、所在槽位等信息,甚至可以看到槽位复用等信息。
一般常用的是-v -l -c三个选项。
javap -l 会输出行号和本地变量表信息。
javap -c 会对当前class字节码进行反编译生成汇编代码。
javap -v classxx除了包含一c内容外,还会输出行号、局部变量表信息、常量池等信息。
以如下代码为例来学习javap的使用方法
① javap -public JavapTest.class 显示公共信息
② javap -protected JavapTest.class 显示受保护的/公共类和成员
③ javap -p(或-private) JavapTest.class 显示所有类和成员(大于private的)
④ javap -package JavapTest.class 显示程序包/受保护的/公共类和成员(默认),非私有的信息
⑤ javap -sysinfo JavapTest.class 显示正在处理的类的系统信息(路径,大小,日期,MD5 散列,源文件名)
⑥ javap -constants JavapTest.class 与前面命令的主要区别,常量值会显示出来COUNTS = 1;
-v 不包含私有信息,所以可以使用组合方式获取更全的信息 java -v -p JavapTest.class
转载地址:http://fpwaz.baihongyu.com/