概述
什么是 javap
javap 是 JDK 自带的反汇编器,可以查看 java 编译器为我们生成的字节码。通过它,我们可以对照源代码和字节码,从而了解很多编译器内部的工作。
百度百科:
javap 是 Java class 文件分解器,可以反编译,也可以查看 java 编译器生成的字节码。用于分解 class 文件。
使用 javap
首先自己实现一个简单的类,如下:
package kaven;
public class StartJavaP {
private static Integer number;
private static final Integer MAX = 100;
public static void main(String[] args){
Integer sum = 0;
Integer i =0;
while(i < MAX){
sum += i;
i++;
}
System.out.println(sum);
}
}
打开 cmd ,cd 到存放这个类的路径上,再用 javac 编译这个类。
C:UsersKaven>cd
C:UsersKaven
C:UsersKaven>f:
F:>cd F:InstallCompilerWorkspaceIDEAMyJavaPsrckaven
F:InstallCompilerWorkspaceIDEAMyJavaPsrckaven>javac StartJavaP.java
编译成功,如下图,多了 StartJavaP.class文件:
再使用 javap -c StartJavaP.class(其他博客说不加 .class 也可以,但是我这里好像不行 )。
F:InstallCompilerWorkspaceIDEAMyJavaPsrckaven>javap -c StartJavaP.class
生成如下字节码:
Compiled from "StartJavaP.java"
public class kaven.StartJavaP {
public kaven.StartJavaP();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_0
1: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
4: astore_1
5: iconst_0
6: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
9: astore_2
10: aload_2
11: invokevirtual #3 // Method java/lang/Integer.intValue:()I
14: getstatic #4 // Field MAX:Ljava/lang/Integer;
17: invokevirtual #3 // Method java/lang/Integer.intValue:()I
20: if_icmpge 56
23: aload_1
24: invokevirtual #3 // Method java/lang/Integer.intValue:()I
27: aload_2
28: invokevirtual #3 // Method java/lang/Integer.intValue:()I
31: iadd
32: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
35: astore_1
36: aload_2
37: astore_3
38: aload_2
39: invokevirtual #3 // Method java/lang/Integer.intValue:()I
42: iconst_1
43: iadd
44: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
47: dup
48: astore_2
49: astore 4
51: aload_3
52: pop
53: goto 10
56: getstatic #5 // Field java/lang/System.out:Ljava/io/PrintStream;
59: aload_1
60: invokevirtual #6 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
63: return
static {};
Code:
0: bipush 100
2: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
5: putstatic #4 // Field MAX:Ljava/lang/Integer;
8: return
}
这样就说明反编译成功了。
最后
以上就是神勇芒果为你收集整理的javap 初使用的全部内容,希望文章能够帮你解决javap 初使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复