阅读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 strs)的方法,使用Javap命令和Byte visualizer两者,输出的字节码中,前者带着泛型信息,后者进行了泛型擦除,两者不同,很是奇怪;您可能也喜欢:Java怎样单测void类型的方法?java环境变量配置读书破万卷,代码如有神Java怎样创建两个KEY(key-pair)的MAPeclipse远程发布代码的方法(SSH自动同步)无觅