文档章节

javap命令详解

JackieYeah
 JackieYeah
发布于 2013/08/29 00:02
字数 869
阅读 623
收藏 3

一、用

       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,如有不正确指出,敬请指正,谢谢!


© 著作权归作者所有

共有 人打赏支持
上一篇: JVM体系结构
下一篇: PowerMock介绍
JackieYeah
粉丝 44
博文 70
码字总数 90004
作品 0
武汉
程序员
私信 提问
修改linux默认jdk

安装jdk从oracle 官网下载jdk,安装,确认安装位置。 注意:rpm包的安装位置是:目录下 2. 将jdk的相关参数添加到环境变量中 3. 使用命令修改默认jdk使用命令安装可选项使用命令选择需要使用的...

hgfgoodcreate
2015/10/09
45
0
Java并发编程原理与实战八:产生线程安全性问题原因(javap字节码分析)

前面我们说到多线程带来的风险,其中一个很重要的就是安全性,因为其重要性因此,放到本章来进行讲解,那么线程安全性问题产生的原因,我们这节将从底层字节码来进行分析。 一、问题引出 先看...

pony1223
07/24
0
0
UltraEdit 执行javap命令

UltraEdit 是一款很好用的文本编辑器,非常推荐使用 我们可以用编辑器来执行javap命令来分析class字节码文件 点击 运行DOS命令 输入 javap -v -p -c -s -l D:espesp-portalesp-portal-serve...

江上湖人
2016/11/15
12
0
编译 x3288 开发板 android5.1 源码包时 遇到的问题和解决方法

1, lzop 找不到: sudo apt-get install lzop 2, /usr/bin jar command not found: 确定自己的jdk安装目录, 我的安装目录是 /usr/lib/jvm/jdk1.7_80, 执行以下命令: cd /usr/bin sudo l...

倔强的小蚂蚁
2016/12/23
31
0
Java中for(;;)和while(true)有啥区别?

群里面有小伙伴提了个问题,说在看并发源码的时候,很多时候源码中都使用for(;;)而不是使用while(true),这两个有什么区别吗? 这种问题,在java里面,最简单有效的办法就是打印字节码看一下,...

若鱼1919
07/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

关于ElasticSearch的使用过程遇到的问题

由于作者从官网下载了ES5.6.10的安装包,解压之后就开始运行ES,前面一切正常。 后面某个查询条件失效。 解决: 1.先试了把单个查询条件撤离出来,当成一个Test来跑,发现还是获取不到值,表...

DoLo-lty
9分钟前
0
0
sed 替换文本内得路径字符等等

1. 句子 sed -i 's%/opt/apache-maven-3.5.3/conf/settings.xml%/data/opt/apache-maven-3.5.3/conf/settings.xml%g' ./*/config.xml 2. 解释 sed linux 一个文件流式处理的工具 2.1 -i 在当......

Aruforce
10分钟前
0
0
mysql_索引

索引类型 哈希表 有序数组 搜索树 MySQL索引 B-树 B+树 innodb的索引 索引维护 关于自增主键的使用 参考 极客时间《mysql实战45讲》

grace_233
10分钟前
0
0
“入乡随俗,服务为主” 发明者量化兼容麦语言啦!

5年时光 我们裹挟前行。发明者量化从筚路蓝缕到步履蹒跚,从以“区块链资产交易”为阵地,再到以“内外盘商品期货”为依托。再到今天全面兼容“麦语言”。每一步,我们始终都在为建立一个优秀...

酒逢知己千杯少
12分钟前
0
0
session深入探讨

简介 session,会话,其实是一个容易让人误解的词。它总跟web系统的会话挂钩,利用session,javaweb项目实现了登录状态的控制。坊间流传,关闭浏览器,就是关闭了web系统的会话。其实浏览器对...

千里明月
13分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部