??官网地址:javap
欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯.
您可以使用该javap
命令来反汇编一个或多个类文件。
概要
javap [options] classes...
指定命令行选项。请参阅javap 的选项。
指定要处理注释的一个或多个由空格分隔的类。您可以指定一个类,该类可以通过其文件名、URL 或其完全限定类名在类路径中找到。
例子:
path/to/MyClass.class
jar:file:///path/to/MyJar.jar!/mypkg/MyClass.class
java.lang.Object
描述
该javap
命令反汇编一个或多个类文件。输出取决于所使用的选项。当不使用选项时,该javap
命令将打印受保护的和公共的字段以及传递给它的类的方法。
该javap
命令不支持多版本 JAR。使用命令的类路径形式可以查看所有 JAR 文件(无论是否为多版本)中的基本条目。使用 URL 形式,您可以使用参数的 URL 形式来指定要反汇编的类的特定版本。
该javap
命令将其输出打印到stdout
.
笔记:
在支持双连字符 (?--
) 样式选项的工具中,GNU 样式选项可以使用等号 (?=
) 而不是空格来分隔选项名称与其值。
javap 的选项
打印命令的帮助消息javap
。
打印发布信息。
打印有关所选类别的附加信息。
打印行和局部变量表。
仅显示公共类和成员。
仅显示受保护的公共类和成员。
显示包/受保护/公共类和成员(默认)。
显示所有类和成员。
打印类中每个方法的反汇编代码,例如组成 Java 字节码的指令。
打印内部类型签名。
显示正在处理的类的系统信息(路径、大小、日期、MD5 哈希值)。
显示static final
常数。
指定包含要反汇编的类的模块。
指定在哪里找到应用程序模块。
指定在哪里可以找到系统模块。
--class-path?path
,, 或者-classpath?path
-cp?path
javap
指定命令用来查找用户类文件的路径。CLASSPATH
它会在设置时?覆盖默认值或环境变量。
覆盖引导类文件的位置。
将指定的选项传递给 JVM。例如:
javap -J-version
javap -J-Djava.security.manager -J-Djava.security.policy=MyPolicy MyClassName
请参阅Java 选项概述。
javap 示例
编译以下HelloWorldFrame
类:
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class HelloWorldFrame extends JFrame {
String message = "Hello World!";
public HelloWorldFrame(){
setContentPane(new JPanel(){
@Override
protected void paintComponent(Graphics g) {
g.drawString(message ,15, 30);
}
});
setSize(100,100);
}
public static void main(String[] args) {
HelloWorldFrame frame = new HelloWorldFrame();
frame.setVisible(true);
}
}
该javap HelloWorldFrame.class
命令的输出结果如下:
Compiled from "HelloWorldFrame.java"
public class HelloWorldFrame extends javax.swing.JFrame {
java.lang.String message;
public HelloWorldFrame();
public static void main(java.lang.String[]);
}
该javap -c HelloWorldFrame.class
命令的输出结果如下:
Compiled from "HelloWorldFrame.java"
public class HelloWorldFrame extends javax.swing.JFrame {
java.lang.String message;
public HelloWorldFrame();
Code:
0: aload_0
1: invokespecial #1 // Method javax/swing/JFrame."<init>":()V
4: aload_0
5: ldc #2 // String Hello World!
7: putfield #3 // Field message:Ljava/lang/String;
10: aload_0
11: new #4 // class HelloWorldFrame$1
14: dup
15: aload_0
16: invokespecial #5 // Method HelloWorldFrame$1."<init>":(LHelloWorldFrame;)V
19: invokevirtual #6 // Method setContentPane:(Ljava/awt/Container;)V
22: aload_0
23: bipush 100
25: bipush 100
27: invokevirtual #7 // Method setSize:(II)V
30: return
public static void main(java.lang.String[]);
Code:
0: new #8 // class HelloWorldFrame
3: dup
4: invokespecial #9 // Method "<init>":()V
7: astore_1
8: aload_1
9: iconst_1
10: invokevirtual #10 // Method setVisible:(Z)V
13: return
}