文档章节

javap命令详解

JackieYeah
 JackieYeah
发布于 2013/08/29 00:02
字数 869
阅读 539
收藏 2
点赞 0
评论 0

一、用

       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
武汉
程序员
修改linux默认jdk

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

hgfgoodcreate ⋅ 2015/10/09 ⋅ 0

UltraEdit 执行javap命令

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

江上湖人 ⋅ 2016/11/15 ⋅ 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 ⋅ 0

ubuntu 14.04 install java8

1、下载JDK 从官网下载jdk8 jdk-8u5-linux-x64.tar.gz 2、解压 $ tar -zxvf jdk-8u5-linux-x64.tar.gz 解压出来是一个jdk1.8.005文件夹 3、将文件夹移动到安装目录 $ sudo mv jdk1.8.005 /us...

Josean_Luo ⋅ 2014/04/26 ⋅ 1

Class字节码文件结构详解

Class字节码中有两种数据类型: 字节数据直接量:这是基本的数据类型。共细分为u1、u2、u4、u8四种,分别代表连续的1个字节、2个字节、4个字节、8个字节组成的整体数据。 表:表是由多个基本...

拉风小野驴 ⋅ 2016/03/02 ⋅ 0

Linux安装更新JDK

linux系统中安装配置jdk具体步骤如下: 1、前期工作检查系统环境 # java -version --查看是否已经安装jdk # which java --查看jdk路径 # getconf LONG_BIT --查看系统版本 # rpm -qa grep g...

江南炫影 ⋅ 2016/12/21 ⋅ 0

Android studio NDK-JNI 前篇

NDK开发,其实是为了项目需要调用底层的一些C/C++的一些东西;另外就是为了效率更加高些。如果你在Eclipse+ADT下开发过NDK就能体会到要么是配置NDK还要下载Cygwin,配置Cygwin ,然后需要编译...

Remix_jx ⋅ 2016/08/24 ⋅ 0

java.lang.ClassFormatError: Test (unrecognized ...

Exception in thread "main" java.lang.ClassFormatError: Test (unrecognized class file version) 运行时出现这个错误通常是运行环境JRE的版本与class文件编译的JDK版本不一致所致 。 我的...

cwalet ⋅ 2013/08/18 ⋅ 0

Ubuntu上安装oracle java 7

http://sddhn.blog.163.com/blog/static/128187792013103014453434/ 1、通过PPA 这种安装方式特点: 1、安装的java含jdk、jre和浏览器插件 2、自动识别64bit或者32bit 3、自动升级为最新版本...

心如明镜 ⋅ 2014/04/25 ⋅ 0

【菜鸟嵌入式学习分享】4412开发板Android4.4.4环境的搭建和编译

刚刚到手的板子,按手册步骤成功烧写了系统,o( ̄▽ ̄)d,分享一下。 Android4.4.4 的编译环境,是在迅为的网盘或者 github中下载 Android4.4 的源码压缩包。解压后可以得到Android4.4.4 和 ...

歌之王子殿下 ⋅ 2015/10/14 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

NFS介绍 NFS服务端安装配置 NFS配置选项

NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导...

lyy549745 ⋅ 30分钟前 ⋅ 0

Spring AOP 源码分析 - 筛选合适的通知器

1.简介 从本篇文章开始,我将会对 Spring AOP 部分的源码进行分析。本文是 Spring AOP 源码分析系列文章的第二篇,本文主要分析 Spring AOP 是如何为目标 bean 筛选出合适的通知器(Advisor...

java高级架构牛人 ⋅ 53分钟前 ⋅ 0

HTML-标签手册

标签 描述 <!--...--> 定义注释。 <!DOCTYPE> 定义文档类型。 <a> 定义锚。超链接 <abbr> 定义缩写。 <acronym> 定义只取首字母的缩写。 <address> 定义文档作者或拥有者的联系信息。 <apple......

ZHAO_JH ⋅ 54分钟前 ⋅ 0

SylixOS在t_main中使用硬浮点方法

问题描述 在某些使用场景中,应用程序不使用动态加载的方式执行,而是跟随BSP在 t_main 线程中启动,此时应用代码是跟随 BSP 进行编译的。由于 BSP 默认使用软浮点,所以会导致应用代码中的浮...

zhywxyy ⋅ 今天 ⋅ 0

JsBridge原理分析

看了这个Github代码 https://github.com/lzyzsd/JsBridge,想起N年前比较火的Hybrid方案,想看看现在跨平台调用实现有什么新的实现方式。代码看下来之后发现确实有点独特之处,这里先把核心的...

Kingguary ⋅ 今天 ⋅ 0

Intellij IDEA神器常用技巧五-真正常用快捷键(收藏级)

如果你觉得前面几篇博文太啰嗦,下面是博主多年使用Intellij IDEA真正常用快捷键,建议收藏!!! sout,System.out.println()快捷键 fori,for循环快捷键 psvm,main方法快捷键 Alt+Home,导...

Mkeeper ⋅ 今天 ⋅ 0

Java 静态代码分析工具简要分析与使用

本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能、特性等方面对它们进行分析和比较,...

Oo若离oO ⋅ 今天 ⋅ 0

SpringBoot自动配置小记

spring-boot项目的特色就在于它的自动配置,自动配置就是开箱即用的本源。 不过支持一个子项目的自动配置,往往比较复杂,无论是sping自己的项目,还是第三方的,都是如此。刚接触会有点乱乱...

大_于 ⋅ 今天 ⋅ 0

React jsx 中写更优雅、直观的条件运算符

在这篇文字中我学到了很多知识,同时结合工作中的一些经验也在思考一些东西。比如条件运算符 Conditional Operator condition ? expr_if_true : expr_if_false 在jsx中书写条件语句我们经常都...

开源中国最帅没有之一 ⋅ 今天 ⋅ 0

vim编辑模式与命令模式

5.5 进入编辑模式 从编辑模式返回一般模式“Esc” 5.6 vim命令模式 命令 :“nohl”=no high light 无高亮,取消内容中高亮标记 "x":保存退出,和wq的区别是,当进入一个文件未进行编辑时,使...

弓正 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部