文档章节

javap命令详解

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

一、用

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


© 著作权归作者所有

共有 人打赏支持
JackieYeah
粉丝 44
博文 70
码字总数 90004
作品 0
武汉
程序员
Java并发编程原理与实战八:产生线程安全性问题原因(javap字节码分析)

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

pony1223
07/24
0
0
修改linux默认jdk

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

hgfgoodcreate
2015/10/09
45
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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

最全最强解析:支付宝钱包系统架构内部剖析(架构图)

支付宝系统架构概况 典型处理默认 资金处理平台 财务会计 支付清算 核算中心 交易 柔性事务 支付宝的开源分布式消息中间件–Metamorphosis(MetaQ) Metamorphosis (MetaQ) 是一个高性能、高可...

晨猫
33分钟前
4
0
竞品分析

那什么样的场景需要用关键纬度分析法分析竞品呢? 竞品分析的目的是为了看竞品们和自己产品重合的业务都具备哪些功能点,以及这些功能是怎么做的,以此确定自己产品的优化方向。 竞品们的业务...

于谦老师
40分钟前
1
0
OSChina 周三乱弹 —— 公司女同事约我

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:分享水木年华的单曲《蝴蝶花(2002年大提琴版)》 《蝴蝶花(2002年大提琴版)》- 水木年华 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
今天
1K
16
Linux环境搭建 | VMware下共享文件夹的实现

在进行程序开发的过程中,我们经常要在主机与虚拟机之间传递文件,比如说,源代码位于虚拟机,而在主机下阅读或修改源代码,这里就需要使用到 「共享文件」 这个机制了。本文介绍了两种共享文...

良许Linux
今天
9
0
JUC锁框架——AQS源码分析

JUC锁介绍 Java的并发框架JUC(java.util.concurrent)中锁是最重要的一个工具。因为锁,才能实现正确的并发访问。而AbstractQueuedSynchronizer(AQS)是一个用来构建锁和同步器的框架,使用A...

长头发-dawn
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部