阅读java的class文件,最常用的方法是jdk自带的javap命令,但是在eclipse有Bytecode visualizer插件,也可以很好地实现阅读;
直接阅读class文件,能够了解一下代码如何执行的内幕,以下面这个代码为例
package test; import java.util.List; public class Test { public void test() { String a = "x" + "y" + 1; String b = "xy1"; System.out.println(a == b); } public static void main(String[] args) { Test t = new Test(); t.test(); } }
test()方法很多人都知道返回true,但是为什么会这样呢?很多人可能说不清楚。我们分别用两种方法阅读一下它们的字节码;
该文件首先需要被编译,得到了Test.class文件
1、使用javap命令阅读
进入Test.class目录,然后使用javap -v Test.class > out将字节码文件读取后存入out文件,然后用notepad++打开out文件:
test()函数的样子:
从字节码可以看到,编译器已经自动的将变量a的值合并在一起,成为了xy1,因此相当于xy1两个字符串的比较,两者都处于常量区,因此相等;
2、使用eclipse的Bytecode visualizer插件阅读
安装好插件之后,首先将其配置一下,以显示最大化的字节码信息
然后打开eclipse的Navigator窗口,找到编译好的Test.class,右键,用字节码方式打开,就会看到更易读的字节码
同时在编辑器的右侧,能够自动查看该段代码的流程图,非常方便;
使用这两种方式,就能够查看代码编译后的内幕,对一些奇怪的语法现象,就能够自己找出为什么了
但是在测试的过程中,自己写了个print(List<String> strs)的方法,使用Javap命令和Byte visualizer两者,输出的字节码中,前者带着泛型信息,后者进行了泛型擦除,两者不同,很是奇怪;
1 thought on “使用javap命令或者eclipse的Bytecode visualizer插件阅读java字节码文件”
Comments are closed.