我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java的javap工具怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java的javap工具怎么使用

这篇文章主要讲解了“Java的javap工具怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java的javap工具怎么使用”吧!

一:简介

javap是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码。通过它,我们可以对照源代码和字节码,从而了解很多编译器内部的工作。

 javap命令的常用参数有:

  -l 打印行和本地变量表

  -public 只显示公共类和成员变量

  -protected  只显示公共的、受保护的类和变量

  -private  显示所有的类和成员变量

  -p  显示所有的类和成员变量

  -Joption   给jvm指定参数,例如:

  javap -J-version

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

  -s 打印内部类型签名(用于泛型)

  -sysinfo 打印被处理类的系统信息(路径,大小,日志,MD5哈希)

  -constants 显示static final常量

  -c 输出分解后的代码。例如,类中每一个方法内,包含java字节码的指令

  -verbose  输出栈大小,变量(locals)和方法参数的个数

  -classpath path 指定查询类的路径.如果设置该值,则会覆盖默认值和CLASSPATH环境变量。

  -bootclasspath path 指定启动类的路径,默认值是jre/lib/rt.jar 和 其他少数的jar.

  -extdir dirs  覆盖 java.ext.dirs路径

二:实例

Java源代码

public class Demo {private String name = "张三";public static void main(String args[]) {System.out.println("Hello World.");}private void sayHello() {System.out.println("Hello " + name);}}

2.javac编译后的字节码

CA FE BA BE 00 00 00 34  00 36 0A 00 0D 00 1E 0800 1F 09 00 0C 00 20 09  00 21 00 22 08 00 23 0A00 24 00 25 07 00 26 0A  00 07 00 1E 08 00 27 0A00 07 00 28 0A 00 07 00  29 07 00 2A 07 00 2B 0100 04 6E 61 6D 65 01 00  12 4C 6A 61 76 61 2F 6C61 6E 67 2F 53 74 72 69  6E 67 3B 01 00 06 3C 696E 69 74 3E 01 00 03 28  29 56 01 00 04 43 6F 6465 01 00 0F 4C 69 6E 65  4E 75 6D 62 65 72 54 6162 6C 65 01 00 12 4C 6F  63 61 6C 56 61 72 69 6162 6C 65 54 61 62 6C 65  01 00 04 74 68 69 73 0100 28 4C 63 6F 6D 2F 62  72 69 6C 6C 69 61 6E 7473 74 61 72 2F 63 69 6D  63 2F 69 6D 2F 64 65 736B 74 6F 70 2F 44 65 6D  6F 3B 01 00 04 6D 61 696E 01 00 16 28 5B 4C 6A  61 76 61 2F 6C 61 6E 672F 53 74 72 69 6E 67 3B  29 56 01 00 04 61 72 6773 01 00 13 5B 4C 6A 61  76 61 2F 6C 61 6E 67 2F53 74 72 69 6E 67 3B 01  00 08 73 61 79 48 65 6C6C 6F 01 00 0A 53 6F 75  72 63 65 46 69 6C 65 0100 09 44 65 6D 6F 2E 6A  61 76 61 0C 00 10 00 1101 00 06 E5 BC A0 E4 B8  89 0C 00 0E 00 0F 07 002C 0C 00 2D 00 2E 01 00  0C 48 65 6C 6C 6F 20 576F 72 6C 64 2E 07 00 2F  0C 00 30 00 31 01 00 176A 61 76 61 2F 6C 61 6E  67 2F 53 74 72 69 6E 6742 75 69 6C 64 65 72 01  00 06 48 65 6C 6C 6F 200C 00 32 00 33 0C 00 34  00 35 01 00 26 63 6F 6D2F 62 72 69 6C 6C 69 61  6E 74 73 74 61 72 2F 6369 6D 63 2F 69 6D 2F 64  65 73 6B 74 6F 70 2F 4465 6D 6F 01 00 10 6A 61  76 61 2F 6C 61 6E 67 2F4F 62 6A 65 63 74 01 00  10 6A 61 76 61 2F 6C 616E 67 2F 53 79 73 74 65  6D 01 00 03 6F 75 74 0100 15 4C 6A 61 76 61 2F  69 6F 2F 50 72 69 6E 7453 74 72 65 61 6D 3B 01  00 13 6A 61 76 61 2F 696F 2F 50 72 69 6E 74 53  74 72 65 61 6D 01 00 0770 72 69 6E 74 6C 6E 01  00 15 28 4C 6A 61 76 612F 6C 61 6E 67 2F 53 74  72 69 6E 67 3B 29 56 0100 06 61 70 70 65 6E 64  01 00 2D 28 4C 6A 61 7661 2F 6C 61 6E 67 2F 53  74 72 69 6E 67 3B 29 4C6A 61 76 61 2F 6C 61 6E  67 2F 53 74 72 69 6E 6742 75 69 6C 64 65 72 3B  01 00 08 74 6F 53 74 7269 6E 67 01 00 14 28 29  4C 6A 61 76 61 2F 6C 616E 67 2F 53 74 72 69 6E  67 3B 00 21 00 0C 00 0D00 00 00 01 00 02 00 0E  00 0F 00 00 00 03 00 0100 10 00 11 00 01 00 12  00 00 00 39 00 02 00 0100 00 00 0B 2A B7 00 01  2A 12 02 B5 00 03 B1 0000 00 02 00 13 00 00 00  0A 00 02 00 00 00 13 0004 00 14 00 14 00 00 00  0C 00 01 00 00 00 0B 0015 00 16 00 00 00 09 00  17 00 18 00 01 00 12 0000 00 37 00 02 00 01 00  00 00 09 B2 00 04 12 05B6 00 06 B1 00 00 00 02  00 13 00 00 00 0A 00 0200 00 00 17 00 08 00 18  00 14 00 00 00 0C 00 0100 00 00 09 00 19 00 1A  00 00 00 02 00 1B 00 1100 01 00 12 00 00 00 4B  00 03 00 01 00 00 00 1DB2 00 04 BB 00 07 59 B7  00 08 12 09 B6 00 0A 2AB4 00 03 B6 00 0A B6 00  0B B6 00 06 B1 00 00 0002 00 13 00 00 00 0A 00  02 00 00 00 1B 00 1C 001C 00 14 00 00 00 0C 00  01 00 00 00 1D 00 15 0016 00 00 00 01 00 1C 00  00 00 02 00 1D

3.javap返汇编后的内容

javap -p -v Demo 

默认情况下javap会打印所有非私有的字段和方法,当加了-p选项后,它还将打印私有的字段和方法;-v 它尽可能地打印所有信息。如果只需要查询方法对应的字节码,那么可以用-c代替-v.

=================基本信息(涵盖了原class文件的相关信息)=======================Classfile /D:/workspace/donkey/cimc-im-desktop/target/classes/com/brilliantstar/cimc/im/desktop/Demo.class  Last modified 2018-9-6; size 909 bytes  MD5 checksum 0f9cd841c4a2ab1f6a00163e55ca6e0f  Compiled from "Demo.java"public class com.brilliantstar.cimc.im.desktop.Demo  minor version: 0  major version: 52  flags: ACC_PUBLIC, ACC_SUPER=================常量池(用来存放各种常量及符号引用)=======================Constant pool:   #1 = Methodref          #13.#30        // java/lang/Object."<init>":()V   #2 = String             #31            // 张三   #3 = Fieldref           #12.#32        // com/brilliantstar/cimc/im/desktop/Demo.name:Ljava/lang/String;   #4 = Fieldref           #33.#34        // java/lang/System.out:Ljava/io/PrintStream;   #5 = String             #35            // Hello World.   #6 = Methodref          #36.#37        // java/io/PrintStream.println:(Ljava/lang/String;)V   #7 = Class              #38            // java/lang/StringBuilder   #8 = Methodref          #7.#30         // java/lang/StringBuilder."<init>":()V   #9 = String             #39            // Hello  #10 = Methodref          #7.#40         // java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;  #11 = Methodref          #7.#41         // java/lang/StringBuilder.toString:()Ljava/lang/String;  #12 = Class              #42            // com/brilliantstar/cimc/im/desktop/Demo  #13 = Class              #43            // java/lang/Object  #14 = Utf8               name  #15 = Utf8               Ljava/lang/String;  #16 = Utf8               <init>  #17 = Utf8               ()V  #18 = Utf8               Code  #19 = Utf8               LineNumberTable  #20 = Utf8               LocalVariableTable  #21 = Utf8               this  #22 = Utf8               Lcom/brilliantstar/cimc/im/desktop/Demo;  #23 = Utf8               main  #24 = Utf8               ([Ljava/lang/String;)V  #25 = Utf8               args  #26 = Utf8               [Ljava/lang/String;  #27 = Utf8               sayHello  #28 = Utf8               SourceFile  #29 = Utf8               Demo.java  #30 = NameAndType        #16:#17        // "<init>":()V  #31 = Utf8               张三  #32 = NameAndType        #14:#15        // name:Ljava/lang/String;  #33 = Class              #44            // java/lang/System  #34 = NameAndType        #45:#46        // out:Ljava/io/PrintStream;  #35 = Utf8               Hello World.  #36 = Class              #47            // java/io/PrintStream  #37 = NameAndType        #48:#49        // println:(Ljava/lang/String;)V  #38 = Utf8               java/lang/StringBuilder  #39 = Utf8               Hello  #40 = NameAndType        #50:#51        // append:(Ljava/lang/String;)Ljava/lang/StringBuilder;  #41 = NameAndType        #52:#53        // toString:()Ljava/lang/String;  #42 = Utf8               com/brilliantstar/cimc/im/desktop/Demo  #43 = Utf8               java/lang/Object  #44 = Utf8               java/lang/System  #45 = Utf8               out  #46 = Utf8               Ljava/io/PrintStream;  #47 = Utf8               java/io/PrintStream  #48 = Utf8               println  #49 = Utf8               (Ljava/lang/String;)V  #50 = Utf8               append  #51 = Utf8               (Ljava/lang/String;)Ljava/lang/StringBuilder;  #52 = Utf8               toString  #53 = Utf8               ()Ljava/lang/String;{===============字段区域(用来列举该类中的各个字段)===================  private java.lang.String name;    descriptor: Ljava/lang/String;    flags: ACC_PRIVATE  public com.brilliantstar.cimc.im.desktop.Demo();    descriptor: ()V    flags: ACC_PUBLIC    Code:      stack=2, locals=1, args_size=1         0: aload_0         1: invokespecial #1                  // Method java/lang/Object."<init>":()V         4: aload_0         5: ldc           #2                  // String 张三         7: putfield      #3                  // Field name:Ljava/lang/String;        10: return      LineNumberTable:        line 19: 0        line 20: 4      LocalVariableTable:        Start  Length  Slot  Name   Signature            0      11     0  this   Lcom/brilliantstar/cimc/im/desktop/Demo;===============方法区域(用来列举该类中的各个方法)=========================  public static void main(java.lang.String[]);    descriptor: ([Ljava/lang/String;)V    flags: ACC_PUBLIC, ACC_STATIC    Code:      stack=2, locals=1, args_size=1         0: getstatic     #4                  // Field java/lang/System.out:Ljava/io/PrintStream;         3: ldc           #5                  // String Hello World.         5: invokevirtual #6                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V         8: return      LineNumberTable:        line 23: 0        line 24: 8      LocalVariableTable:        Start  Length  Slot  Name   Signature            0       9     0  args   [Ljava/lang/String;  private void sayHello();    descriptor: ()V    flags: ACC_PRIVATE    Code:      stack=3, locals=1, args_size=1         0: getstatic     #4                  // Field java/lang/System.out:Ljava/io/PrintStream;         3: new           #7                  // class java/lang/StringBuilder         6: dup         7: invokespecial #8                  // Method java/lang/StringBuilder."<init>":()V        10: ldc           #9                  // String Hello        12: invokevirtual #10                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;        15: aload_0        16: getfield      #3                  // Field name:Ljava/lang/String;        19: invokevirtual #10                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;        22: invokevirtual #11                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;        25: invokevirtual #6                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V        28: return      LineNumberTable:        line 27: 0        line 28: 28      LocalVariableTable:        Start  Length  Slot  Name   Signature            0      29     0  this   Lcom/brilliantstar/cimc/im/desktop/Demo;}SourceFile: "Demo.java"

以其中的sayHello()方法为例,除了方法描述以及访问权限之外,方法中还包括最为重要的代码区域。

1).代码区域一开始会声明该方法中的操作数栈(stack=3) 和局部变量数目(locals=1)的最大值,以及该方法接收参数的个数(args_size=1)这里局部变量指的是字节码中的局部变量,而非Java程序中的局部变量。

2).接下来是该方法的字节码,每条字节码均标注了对应的偏移量,这是用来定位字节码的。

3).接下来的行数表(LineNumberTable)则是Java源程序到字节码偏移量的映射。行数表和局部变量均属于调试信息,Java虚拟机并不要求class文件必备这些信息。

感谢各位的阅读,以上就是“Java的javap工具怎么使用”的内容了,经过本文的学习后,相信大家对Java的javap工具怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java的javap工具怎么使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java的javap工具怎么使用

这篇文章主要讲解了“Java的javap工具怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java的javap工具怎么使用”吧!一:简介javap是JDK自带的反汇编器,可以查看ja
2023-06-02

Javac/javap 自带工具如何使用

这篇文章主要讲解了“Javac/javap 自带工具如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Javac/javap 自带工具如何使用”吧!Javac/javap 自带工具简单使
2023-06-09

Java的keytool工具怎么使用

这篇文章主要介绍“Java的keytool工具怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java的keytool工具怎么使用”文章能帮助大家解决问题。一、keytool的概念  keyt
2023-06-29

Java的Classpath工具怎么使用

这篇文章主要介绍“Java的Classpath工具怎么使用”,在日常操作中,相信很多人在Java的Classpath工具怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java的Classpath工具怎
2023-06-03

Java中的工具Jstack怎么使用

本篇内容介绍了“Java中的工具Jstack怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!jstack - Prints Java
2023-06-30

Java工具类RelativeDateFormat怎么使用

要使用Java工具类RelativeDateFormat,您可以按照以下步骤进行操作:1. 下载RelativeDateFormat.java文件,或者复制其代码到您的Java项目中。2. 在您的Java类中,导入RelativeDateF
2023-10-20

怎么使用Java工具类库hutool

本篇内容介绍了“怎么使用Java工具类库hutool”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!简介Hutool是Hu + tool的自造
2023-06-16

怎么使用java构建工具gradle

本篇内容主要讲解“怎么使用java构建工具gradle”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用java构建工具gradle”吧!  现在我们都在谈领域驱动设计,Gradle本身的领
2023-06-25

如何使用javap分析Java的字符串

这篇文章主要介绍“如何使用javap分析Java的字符串”,在日常操作中,相信很多人在如何使用javap分析Java的字符串问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用javap分析Java的字符串
2023-06-02

Hutool Java工具类库_ExcelUtil怎么使用

这篇文章主要介绍“Hutool Java工具类库_ExcelUtil怎么使用”,在日常操作中,相信很多人在Hutool Java工具类库_ExcelUtil怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
2023-06-21

Java Class加密工具ClassFinal怎么使用

本篇内容主要讲解“Java Class加密工具ClassFinal怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java Class加密工具ClassFinal怎么使用”吧!Jar包加密
2023-07-05

java的http请求工具类HttpClientUtils怎么使用

本篇内容主要讲解“java的http请求工具类HttpClientUtils怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java的http请求工具类HttpClientUtils怎么使
2023-06-19

Java本地缓存工具LoadingCache怎么使用

这篇文章主要介绍“Java本地缓存工具LoadingCache怎么使用”,在日常操作中,相信很多人在Java本地缓存工具LoadingCache怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java本
2023-06-22

Java全能工具类之Hutool怎么使用

本篇内容主要讲解“Java全能工具类之Hutool怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java全能工具类之Hutool怎么使用”吧!Hutool简介Hutool是一个Java工
2023-07-05

Java构建工具gradle怎么安装使用

本文小编为大家详细介绍“Java构建工具gradle怎么安装使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java构建工具gradle怎么安装使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。学习Java的
2023-06-27

java dump文件分析工具怎么使用

Java dump文件是Java虚拟机在运行过程中生成的一种文件,用于记录Java虚拟机的内存使用情况、线程状态等信息。分析Java dump文件可以帮助定位和解决Java应用程序的性能问题和内存泄漏等问题。以下是使用常见的Java dum
2023-09-13

java集合排序工具类怎么使用

Java集合排序工具类可以使用`java.util.Collections`类中的静态方法来实现。以下是使用Java集合排序工具类的基本步骤:导入`java.util.Collections`类:在使用Java集合排序工具类之前,首先需要导
2023-10-26

smokeping工具怎么使用

Smokeping是一个网络延迟监测工具,它可以用来监测网络的时延和丢包情况。下面是Smokeping的使用步骤:1. 安装Smokeping:在Linux系统上,可以使用包管理工具如yum或apt-get安装Smokeping。具体安装步
2023-08-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录