How to use javap?
本文最后更新于:10 个月前
Javap Use
javap 是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码。
语法:
- javap [ 命令选项 ] class. . .
- javap 命令用于解析类文件。其输出取决于所用的选项
命令选项
- -help 输出 javap 的帮助信息。
- -l 输出行及局部变量表。
- -b 确保与 JDK 1.1 javap 的向后兼容性。
- -public 只显示 public 类及成员。
- -protected 只显示 protected 和 public 类及成员。
- -package 只显示包、protected 和 public 类及成员。这是缺省设置。
- -private 显示所有类和成员。
- -J[flag] 直接将 flag 传给运行时系统。
- -s 输出内部类型签名。
- -c 输出类中各方法的未解析的代码,即构成 Java 字节码的指令。
- -verbose 输出堆栈大小、各方法的 locals 及 args 数,以及class文件的编译版本
1 | |
反汇编成java字节码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72Compiled from "Main.java"
public class Main {
public Main();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: new #7 // class java/util/ArrayList
3: dup
4: invokespecial #9 // Method java/util/ArrayList."<init>":()V
7: astore_1
8: aload_1
9: ldc #10 // String Google
11: invokevirtual #12 // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
14: pop
15: aload_1
16: ldc #16 // String Runoob
18: invokevirtual #12 // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
21: pop
22: aload_1
23: ldc #18 // String Taobao
25: invokevirtual #12 // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
28: pop
29: aload_1
30: ldc #20 // String Weibo
32: invokevirtual #12 // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
35: pop
36: new #22 // class test/Person
39: dup
40: ldc #24 // String wuxiang
42: ldc #26 // String male
44: aload_1
45: invokespecial #28 // Method test/Person."<init>":(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V
48: astore_2
49: getstatic #31 // Field java/lang/System.out:Ljava/io/PrintStream;
52: aload_2
53: invokevirtual #37 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
56: new #43 // class java/lang/String
59: dup
60: ldc #45 // String temp1
62: invokespecial #47 // Method java/lang/String."<init>":(Ljava/lang/String;)V
65: astore_3
66: ldc #45 // String temp1
68: astore 4
70: getstatic #31 // Field java/lang/System.out:Ljava/io/PrintStream;
73: aload_3
74: aload 4
76: if_acmpne 83
79: iconst_1
80: goto 84
83: iconst_0
84: invokevirtual #50 // Method java/io/PrintStream.println:(Z)V
87: getstatic #31 // Field java/lang/System.out:Ljava/io/PrintStream;
90: aload_3
91: invokevirtual #53 // Method java/lang/String.hashCode:()I
94: invokevirtual #57 // Method java/io/PrintStream.println:(I)V
97: getstatic #31 // Field java/lang/System.out:Ljava/io/PrintStream;
100: aload 4
102: invokevirtual #53 // Method java/lang/String.hashCode:()I
105: invokevirtual #57 // Method java/io/PrintStream.println:(I)V
108: ldc #60 // String Hello
110: astore 4
112: bipush 100
114: istore 5
116: getstatic #31 // Field java/lang/System.out:Ljava/io/PrintStream;
119: iload 5
121: invokevirtual #57 // Method java/io/PrintStream.println:(I)V
124: return
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!