本文提供了三種較為方便的查看字節碼的方式。
完全命令行方式
假設本地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的右邊就會看到類似下圖的界面,非常豐富的類信息。
這里寫圖片描述
以上。