反汇编一个或多个类文件。
用法
javap [options] classfile ...
选项
命令行选项。
类文件
一个或多个由空格分隔的类,用于处理注释,例如DocFooter.class。你可以指定可在类路径中找到的类,文件名或URL等file:///home/user/myproject/src/DocFooter.class
。
描述
该javap命令反汇编一个或多个类文件。输出取决于使用的选项。如果未使用任何选项,则javap命令将打印包,protected和public字段以及传递给他的类的方法。该javap命令将其输出打印到stdout。
选项
- -help --help -?
打印javap命令的帮助消息。
- -version
打印版本信息
- -l
打印行和局部变量表
- -public
仅显示公共类和成员。
- -protected
仅显示受保护的/公共类和成员。
- -private -p
显示所有类和成员。
- -Joption
将指定选项传递给JVM。例如:
javap -J-version
javap -J-Djava.security.manager -J-Djava.security.policy=MyPolicy MyClassName
- -s
打印内部类型签名
- -sysinfo
显示正在处理的类的系统信息(路径、大小、日期、MD5、哈希)。
- -constants
显示static final 常量
- -C
为类中的每个方法打印反汇编代码,例如,包含Java字节码的指令。
- -verbose -v
打印堆栈大小,本地数量和方法参数。
- -classpath <path> -cp <path>
指定javap命令用于查找用户类文件的路径。设置时覆盖默认值或CLASSPATH环境变量
- -bootclasspath <path>
指定加载引导类的路径。默认情况下,引导类是实现位于其中的核心Java平台jre/lib/rt.jar和其他几个JAR文件的类。
- -extdir dirs
覆盖搜索已安装扩展的位置。扩展名的默认位置的值是java.ext.dirs。
示例
import java.awt.*;
import java.applet.*;
public class DocFooter extends Applet {
String date;
String email;
public void init() {
resize(500,100);
date = getParameter("LAST_UPDATED");
email = getParameter("EMAIL");
}
public void paint(Graphics g) {
g.drawString(date + " by ",100, 15);
g.drawString(email,290,15);
}
}
该javap DocFooter.class命令的输出产生以下结果:
public class DocFooter extends java.applet.Applet {
java.lang.String date;
java.lang.String email;
public DocFooter();
public void init();
public void paint(java.awt.Graphics);
}
javap -c DocFooter.class命令的输出产生以下结果:
public class DocFooter extends java.applet.Applet {
java.lang.String date;
java.lang.String email;
public DocFooter();
Code:
0: aload_0
1: invokespecial #1 // Method
java/applet/Applet."<init>":()V
4: return
public void init();
Code:
0: aload_0
1: sipush 500
4: bipush 100
6: invokevirtual #2 // Method resize:(II)V
9: aload_0
10: aload_0
11: ldc #3 // String LAST_UPDATED
13: invokevirtual #4 // Method
getParameter:(Ljava/lang/String;)Ljava/lang/String;
16: putfield #5 // Field date:Ljava/lang/String;
19: aload_0
20: aload_0
21: ldc #6 // String EMAIL
23: invokevirtual #4 // Method
getParameter:(Ljava/lang/String;)Ljava/lang/String;
26: putfield #7 // Field email:Ljava/lang/String;
29: return
public void paint(java.awt.Graphics);
Code:
0: aload_1
1: new #8 // class java/lang/StringBuilder
4: dup
5: invokespecial #9 // Method
java/lang/StringBuilder."<init>":()V
8: aload_0
9: getfield #5 // Field date:Ljava/lang/String;
12: invokevirtual #10 // Method
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
15: ldc #11 // String by
17: invokevirtual #10 // Method
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
20: invokevirtual #12 // Method
java/lang/StringBuilder.toString:()Ljava/lang/String;
23: bipush 100
25: bipush 15
27: invokevirtual #13 // Method
java/awt/Graphics.drawString:(Ljava/lang/String;II)V
30: aload_1
31: aload_0
32: getfield #7 // Field email:Ljava/lang/String;
35: sipush 290
38: bipush 15
40: invokevirtual #13 // Method
java/awt/Graphics.drawString:(Ljava/lang/String;II)V
43: return
}
翻译:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javap.html