一、背景
通常研究類檔案或者java 反彙編會使用 javap指令。
public class IntTest {
public static void main(String[] args) {
Integer a = 100, b =100, c = 150, d = 150;
System.out.println(a == b);
System.out.println(c == d);
}
}
如 javap -c IntTest
Compiled from "IntTest.java"
public class com.imooc.basic.learn_int.IntTest {
public com.imooc.basic.learn_int.IntTest();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: bipush 100
2: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
5: astore_1
6: bipush 100
8: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
11: astore_2
12: sipush 150
15: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
18: astore_3
19: sipush 150
22: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
25: astore 4
27: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream;
30: aload_1
31: aload_2
32: if_acmpne 39
35: iconst_1
36: goto 40
39: iconst_0
40: invokevirtual #4 // Method java/io/PrintStream.println:(Z)V
43: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream;
46: aload_3
47: aload 4
49: if_acmpne 56
52: iconst_1
53: goto 57
56: iconst_0
57: invokevirtual #4 // Method java/io/PrintStream.println:(Z)V
60: return
}
那麼是否有可視化工具呢?
今天簡單介紹一款 java 類檔案的可視化工具: classpy
二、介紹
2.1 下載下傳安裝
github 位址:
https://github.com/zxh0/classpy如果是mac 系統安裝非常簡單:
brew tap guxingke/repo && brew install classpy
使用也很簡單,在指令行工具輸入 classpy 即可打開
如果非Mac 系統,需要下載下傳源碼并通過gradle進行編譯和運作
Build
cd path/to/classpy
./gradlew uberjar
Run
./gradlew run
2.2 介紹
給出一個簡單的代碼片段:
通過 javac 編譯
然後啟動 classpy ,将編譯後的 class檔案拖動到軟體界面,即可看到類檔案的内容:
三、總結
建議大家多嘗試使用Java反編譯工具來學習Java語言。