一、背景
通常研究类文件或者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
cd path/to/classpy
./gradlew run
2.2 介绍
给出一个简单的代码片段:
通过 javac 编译
然后启动 classpy ,将编译后的 class文件拖动到软件界面,即可看到类文件的内容:
三、总结
建议大家多尝试使用Java反编译工具来学习Java语言。