javap命令详解
javap命令详解
JackieYeah 发表于4年前
javap命令详解
  • 发表于 4年前
  • 阅读 511
  • 收藏 2
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

一、用

       javap [ 选项 ] classes

二、描述

      javap命令反汇编一个或多个类文件。它的输出由使用的选项决定。如果没有使用选项,javap命令将打印输出传递给它的类的包, protected和public属性和方法。javap打印输出到标准输出。

选项

      命令行选项。

classes

      一个或多个(由空格隔开)的待处理的类列表。你可以指定一个可以在类路径上找到的类,通过文件名(例如,C:\myproject\src\DocFooter.class),或者使用一个URL (例如,file:///C:/myproject/src/DocFooter.class)。

例如,编译下面声明的类:

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(官网上是 javap DocFooter.class ,但在下面实践的时候会提示ERROR:cound not find DocFooter.class ,需要去掉.class后缀)得到的输出结果如下:

Compiled from "DocFooter.java" 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后缀) 得到的输出结果如下:
Compiled from "DocFooter.java"
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        
}


三、选项

-help

--help

-?

      打印输出javap的帮助信息。

-l

      打印线和局部变量表。

-public

      只显示public类成员。

-protected

      只显示protected和public类及成员。

-package

      只显示包, protected和public类及成员。这是默认的

-private

-p

       显示所有类及成员。

-Jflag

       直接将flag传递给运行系统。例如:

javap -J-version
javap -J-Djava.security.manager -J-Djava.security.policy=MyPolicy MyClassName

-s

        打印内部的类型签名

-sysinfo

        显示正在被处理的类的系统信息 (路径, 大小, 日期, MD5 hash)

-constants

        显示static final常量.

-c

        打印输出反汇编的代码,例如,对于类中的一种方法,包含Java字节码的指令。这些在 Java Virtual Machine Specification文档中有描述。

-verbose

        打印堆栈大小,方法中局部变量和参数个数。

-classpath path

        指定javap命令用来查找类的路径。如果指定了它的值,将会覆盖默认的或是在CLASSPATH环境变量中的值

-bootclasspath path

       指定加载bootstrap类的路径。bootstrap类默认指的是在jre\lib\rt.jar和一些其他jar文件中实现了Java平台核心的类。

-extdirs dirs

      覆盖寻找已安装的扩展的路径。默认的扩展安装路径是java.ext.dirs的值。

     

       声明:文章内容翻译自Oracle官网http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javap.html,如有不正确指出,敬请指正,谢谢!


标签: Java javap
共有 人打赏支持
粉丝 44
博文 70
码字总数 90004
×
JackieYeah
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: