一、用法

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."":()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."":()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

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

-classpathpath

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

-bootclasspathpath

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

-extdirsdirs

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

java -p_javap命令详解 - JackieYeah的个人空间 - OSCHINA - 中文开源技术交流社区相关推荐

  1. java 实现按规则自增功能_java运算符详解 - osc_74vaali6的个人空间 - OSCHINA - 中文开源技术交流社区...

    java基础(2)--运算符详解 自增自减规则 自增自减就是常用的 a = a++ 或者 a = ++a;前者是后缀式,先把a赋值给a,再加一:后者是后缀式,先加一,在赋值给a;而且a++,++a并不 ...

  2. 高并发服务器开源项目,高并发服务器框架详解 - osc_qgfjs4a5的个人空间 - OSCHINA - 中文开源技术交流社区...

    1)如何设计如何扩展 2)什么是高并发 (1)任务:完成某个功能的一个一个目标任务,服务器程序也是不例外的. (2)CPU核心:完成具体任务的,是CPU核心 + 周围的外设(读写磁盘IO.网络IO) ...

  3. python写等腰三角形的性质_杨辉三角—知识点详解 - osc_8cfq8uoa的个人空间 - OSCHINA - 中文开源技术交流社区...

    杨辉三角 杨辉三角(欧洲叫帕斯卡三角)是一个很奇妙的东西,它是我国数学家杨辉在1261年发现的,欧洲的帕斯卡于1654年发现,比我国的巨佬数学家杨辉晚了393年.(在此show一下我的爱国情怀) 铺垫 ...

  4. linux7的mcelog在哪,mcelog用法详解 - osc_bgoqj0sj的个人空间 - OSCHINA - 中文开源技术交流社区...

    手动启动mcelog方法: # mcelog --daemon Run mcelog in daemon mode, waiting for errors from the kernel. 后台服务启 ...

  5. dw main.less php,less基础详解 - Python测试和开发 - OSCHINA - 中文开源技术交流社区

    1.初识less less作为一门CSS扩展语言,也就是说CSS预处理器.(Leaner Style Sheets)简称less,它只不过是为css新增这些的功能,比如说:变量.函数.作用域等等.它的 ...

  6. java中的v递归的思想,Java中的递归思想 - osc_9lqilnv7的个人空间 - OSCHINA - 中文开源技术交流社区...

    递归: 递归的概念:方法自身调用自身则称为递归. 递归的分类: 间接递归:方法A调用方法B,方法B调用方法C,方法C调用方法A. 直接递归: 方法A调用方法A.(常用) 递归的注意事项: 递归一定要出 ...

  7. java虚拟机jvm_java虚拟机jvm - zhuyuansj的个人空间 - OSCHINA - 中文开源技术交流社区...

    Java内存结构和java内存模型的区别.往往很多人会搞起来.这里主要对这2种进行解释并进行操作.经实践会JVM调优和不会JVM调优差别确实很大,足足可以提升服务器一倍的性能. java内存结构:所谓 ...

  8. java hashmap 去重_HashMap去重 - osc_sj1kgo4z的个人空间 - OSCHINA - 中文开源技术交流社区...

    package util; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import ...

  9. 永真命题java怎么表达,147.命题逻辑 - osc_pll3h24t的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.语句 1.1命题 一个或真或假,而不能两者都是的陈述句. 说明: 1)命题是陈述句,而不能是疑问句.命令句.感叹句等: 例如(1)把门关上! (2)你到哪里去? 2)如果命题为真,我们就说它的真值 ...

最新文章

  1. 使用STC8G1K08制作调频接收模块TEA5767配置电路
  2. C# 去除文件和文件夹的只读属性
  3. BZOJ 1920 Luogu P4217 [CTSC2010]产品销售 (模拟费用流、线段树)
  4. 为什么都用m3u8_为什么中国人都喜欢用红砖盖房?
  5. python 文本相似度计算函数_四种计算文本相似度的方法对比
  6. 用Python做一个简单的翻译工具
  7. sap甲方_带你走进SAP项目实施过程——前言
  8. poj 2417 Discrete Logging
  9. 对于防止按钮重复点击的尝试
  10. [bzoj1066] [SCOI2007]蜥蜴
  11. webpack5+vue3搭建h5项目模板-(一)-基础配置
  12. 西门子STEP7、博图里的数据块(DB)编址规则
  13. 从SHAttered事件谈安全
  14. vue音乐播放器笔记
  15. 以退为进还是被逼无奈?创始人王劲离职后,景驰科技该何去何从?
  16. edge浏览器设置启动时默认打开新标签页
  17. 管理员已阻止你运行此应用。有关详细信息,请与管理员联系。windows10
  18. 硬核蹭热点系列:负油价和巴舍利耶模型
  19. 高清壁纸wallhaven.cc下载图片
  20. 导航地图哪家强?谷歌地图超高分辨率完爆同类型对手

热门文章

  1. 【转】BMP图像文件格式
  2. [Unity3d]多个摄像机叠加效果
  3. DHCP option 150与option 66的区别
  4. linux下rpm方式安装mysql(2012-5-12)
  5. pyinstaller打包执行exe出现“ModuleNotFoundError: No module named ‘scipy.spatial.transform._rotation_group”
  6. 如何用AD20打开ddb文件
  7. 服务器主板装w7系统死机,解决win7安装过程死机现象有一招
  8. 希赛软件设计师视频教程-3.1 进程(第三部分) 标清
  9. SWOT分析是神马?
  10. Android监听事件