本文提供了三种较为方便的查看字节码的方式。
完全命令行方式
假设本地D盘里有个Hello.java文件:
public class Hello
{
public void say(){
Hello he = new Hello();
System.out.println("hello world");
}
}
首先使用命令javac D:\Hello.java,将java文件编译成Hello.class文件,此时直接打不开,可使用jd-gui.exe程序打开,或者用ide工具(比如as)打开,不过显示的Hello.class文件是被反编译过的,基本与原java文件一样。并不是我们想要看的格式。这时,使用javap -c D:\Hello.class便可以在dos窗口里看到我们需要的字节码文件:
public class Hello {
public Hello();
Code:
0: aload_0
1: invokespecial #1
4: return
public void say();
Code:
0: new #2 // class Hello
3: dup
4: invokespecial #3 // Method "<init>":()V
7: astore_1
8: getstatic #4
11: ldc #5 // String hello world
13: invokevirtual #6
16: return
}
外接工具的方式
假设本地D盘里有个Hello.java文件,类似上面的描述编译成Hello.class文件(或者找到ide中相关out文件夹中的那些.class文件),然后下载Java Bytecode Editor,解压,直接运行jbe.sh即可看到UI面板,打开Hello.class文件即可看到类似下图的目录,将能看到非常丰富的类信息。
内部插件工具的方式
上述两种方式会跳出ide,有时会显得比较费时。我们需要一款合适的插件,感谢jclasslib bytecode viewer,我们打开ide(这里是android studio),setting-plugin-browse..-bytecode viewer-jclasslib bytecode viewer-install-restart,此时呢,打开一个java文件,对java文件,然后面板上View-Show bytecode with jclasslib,此时在ide的右边就会看到类似下图的界面,非常丰富的类信息。
以上。