java文档收集之javap

发布时间:2024年01月12日

??官网地址:javap

欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯.

javap

您可以使用该javap命令来反汇编一个或多个类文件。

概要

javap [options] classes...

options

指定命令行选项。请参阅javap 的选项

classes

指定要处理注释的一个或多个由空格分隔的类。您可以指定一个类,该类可以通过其文件名、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 的选项

-help--help, 或者-?

打印命令的帮助消息javap

-version

打印发布信息。

-verbose或者-v

打印有关所选类别的附加信息。

-l

打印行和局部变量表。

-public

仅显示公共类和成员。

-protected

仅显示受保护的公共类和成员。

-package

显示包/受保护/公共类和成员(默认)。

-private或者-p

显示所有类和成员。

-c

打印类中每个方法的反汇编代码,例如组成 Java 字节码的指令。

-s

打印内部类型签名。

-sysinfo

显示正在处理的类的系统信息(路径、大小、日期、MD5 哈希值)。

-constants

显示static final常数。

--module?module或者-m?module

指定包含要反汇编的类的模块。

--module-path?path

指定在哪里找到应用程序模块。

--system?jdk

指定在哪里可以找到系统模块。

--class-path?path,, 或者-classpath?path-cp?path

javap指定命令用来查找用户类文件的路径。CLASSPATH它会在设置时?覆盖默认值或环境变量。

-bootclasspath?path

覆盖引导类文件的位置。

-Joption

将指定的选项传递给 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
}

文章来源:https://blog.csdn.net/a309450028a/article/details/135556670
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。