java命令:javap。

反汇编一个或多个类文件。

用法

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值