使用javap深入查看类文件

深入了解 Java 类文件:使用 javap 进行分析 本文详细介绍了如何使用Java开发工具包(JDK)中的javap命令行工具来反汇编和检查Java类文件。javap能够将二进制格式的类文件转换为人类可读的格式,帮助开发者在调试编译问题、验证方法可见性或分析第三方库时,更深入地理解Java程序在JVM中的运行机制。文章涵盖了javap的基本用法,包括如何查看类文件中的公共、私有成员以及内部类,并解释了方法签名和类型描述符的表示方法。此外,文章还探讨了类文件中的常量池结构,展示了如何通过javap查看和解析常量池条目,以理解类文件中使用的符号信息。通过掌握这些 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>  Java 开发人员熟悉在一个循环中使用StringBuffer 来代替串联 String 对象能获得最佳性能。然而,多数开发人员从来没有比较两种方法产生的字节代码的区别。在 Java 开发工具包(JDK)中有一个叫做 javap 的工具可以告诉你为什么这样做可以获得最佳性能。   Javap 将一个类和它的方法的一些转储信息输出到标准输出。该工具不把代码反编译为 java 源代码,但是它会把字节代码反汇编成为由 Java 虚拟机规范定义的字节代码指令。   在你需要查看编译器为你或者给你做了什么的时候,或者你想要看一处代码的改动对编译后的类文件有什么影响的时候,javap 相当有用。   现在以我们前面提到的 StringBuffer 和 String 作为一个例子。下面是一个专门为例子设计的类,它有两个方法,都返回一个由0到 n 的数字组成的 String,其中 n 由调用者提供。两个方法唯一的区别在于一个使用 String 构建结果,另外一个使用 StringBuffer 构建结果。   public class JavapTip {    public static void main(String []args) {    }    private static String withStrings(int count) {    String s = "";    for (int i = 0; i < count; i ) {    s = i;    }    return s;    }    private static String withStringBuffer(int count) {    StringBuffer sb = new StringBuffer();    for (int i = 0; i < count; i ) {    sb.append(i);    }    return sb.toString();    }   }   现在让我们看看对这个类使用–c 选项运行 javap 的输出。-c 选项告诉 javap 反汇编在类中遇到的字节代码。   运行方式如下:   >javap -c JavapTip   此命令的输出为:   Method java.lang.String withStrings(int)    0 ldc #2    2 astore_1    3 iconst_0    4 istore_2    5 goto 30    8 new #3    11 dup    12 invokespecial #4    15 aload_1    16 invokevirtual #5    19 iload_2    20 invokevirtual #6    23 invokevirtual #7    26 astore_1    27 iinc 2 1    30 iload_2    31 iload_0    32 if_icmplt 8    35 aload_1    36 areturn   Method java.lang.String withStringBuffer(int)    0 new #3    3 dup    4 invokespecial #4    7 astore_1    8 iconst_0    9 istore_2    10 goto 22    13 aload_1    14 iload_2    15 invokevirtual #6    18 pop    19 iinc 2 1    22 iload_2    23 iload_0    24 if_icmplt 13    27 aload_1    28 invokevirtual #7    31 areturn   如果你以前没有看过 Java 汇编器,那么这个输出对你来说就会比较难懂,但是你应该可以看到 withString 方法在每次循环的时候都新创建了一个 StringBuffer 实例。然后它将已有的 String 的当前值追加到 StringBuffer 上,然后追加循环的当前值。最后,它对 buffer 调用 toString 并将结果赋给现有的 String 引用。   withStringBuffer 方法与这个方法正好相反,在每次循环的时候 withStringBuffer 只调用现有 StringBuffer 的 append 方法,没有创建新的对象,也没有新的 String 引用。   在这种情况下,我们已经知道了使用 StringBuffer 代替 String 是一种好的做法,但是如果我们不知道呢?那么 javap 可以帮助我们找到答案。在这里你可以看到更详细的关于String,StringBuffer 的解释   你并不会经常需要一个 Java 反汇编器,但是当你需要的时候,知道你自己的机器已经有一个并且用法相当简单的反汇编器当然是一件好事。如果你感兴趣,看书看看 javap 的其它选项——或许你会发现在你的环境中需要的特性。   --------------------------------------------------------------------------------   本文作者:David Petersheim是Genscape公司的一位应用开发主任。他设计和开发服务器端应用程序来获取和处理实时能源数据。
PSM倾向匹配详细步骤和程序 目录1.安装psmatch2统计包。2.数据准备3.数据分析及命令解读4.结果解读4.1模型拟合结果,此处无太多实际意义。4.2试验组可匹配的观测概览,按照命令中设定的匹配规则,试验组有8例患者未能匹配到合适对照。4.3结果解读的重点应该是对stata新生成的中间变量的解读。4.4均衡性检验结果4.5匹配结果的图示化5.Stata命令汇总最后留下两个问题给大家思考:题目 试验设计中,匹配的目的在于确保干预效应估计是建立在可比个体之间的不同结果的基础上。最简单的匹配方式是将干预组和对照组中协变量值相同的两个个 阅读详情

相关推荐

1.4 《SST通用技术规范》整体框架与核心条款解读

本小节以**GB/T《电力电子变压器通用技术要求》**(固态变压器SST核心通用规范)为核心依据,结合电力电子变压器技术特性与工程应用边界,系统解析规范的整体章节框架、层级逻辑与强制性/推荐性核心条款,明确规范与传统工频变压器标准的差异,为SST拓扑设计、性能验证、出厂检验与工程落地提供标准化依据。全文以标准原文、期刊文献数据与试验规范为支撑,无主观推演与感性表述。

技术工作者 1697

用Javap反编译帮你理解Java特性

Java 开发人员熟悉在一个循环中使用StringBuffer 来代替串联 String 对象能获得最佳性能。然而,多数开发人员从来没有比较两种方法产生的字节代码的区别。在 Java 开发工具包(JDK)中有一个叫做 javap 的工具可以告诉你为什么这样做可以获得最佳性能。      Javap 将一个类和它的方法的一些转储信息输出到标准输出。该工具不把代码反编译为 java 源代码,但是它会把

侯廷文 专栏 543

告别wx.showActionSheet:微信小程序自定义底部弹框的5种实现方式对比

本文深入对比了微信小程序中替代原生wx.showActionSheet的五种自定义底部弹框实现方案。从基础视图层模拟到组件化封装,再到利用第三方UI库、CSS3动画及Page-Meta组件,详细分析了各方案的优缺点与适用场景,旨在帮助开发者根据项目需求,选择最合适的方案以实现高度定制化、交互丰富的弹框效果。

weixin_29005499的博客 191

jarjar原理分析

前言 之前使用jarjar.jar(官网)来替换第三方jar包的包名,这里来研究一下实现原理。主要内容:jarjar的使用方式、jarjar与替换包名有关的源码、ASM的介绍、Class文件格式、修改class文件。 jarjar的使用 这里以eventbus的jar包做例子,用jd-gui查看jar结构: 再点击图示的类,利用自带的反编译可以看到这里import了org.greenrobot....

MEzzsy的博客 2919

239号资源-simulink仿真:MATLAB/Simulink教程(PDF文档)-----已提供下载资源

电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python,机器学习,计算机视觉,深度学习,神经网络,数据挖掘领域.电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python,机器学习,计算机视觉,深度学习,神经网络,数据挖掘领域.《《《《《《《《更多资源还请持续关注本专栏》》》》》》》《《《《《《《《更多资源还请持续关注本专栏》》》》》》》论文与完整源程序_电网论文源程序的博客-优快云博客。电网论文源程序-优快云博客。

LIANG674027206的博客 1076

RANSAC地面点分割:从原理到C++实战优化

本文深入解析RANSAC算法在点云地面分割中的原理与C++实战优化,涵盖动态迭代次数、自适应阈值等关键技巧,通过并行计算和内存访问优化提升性能,适用于激光雷达点云处理。

weixin_29015051的博客 278

实践详解javap命令(反编译字节码)

(1)javap命令反汇编一个或多个class文件。输出依赖使用的参数,若不使用参数,直接使用javap命令会打印protected和public限定的类属性和方法。 (2)javap命令不支持多版本jar。通过类路径形式使用javap命令只能查看当前jar文件的类文件反编译结果,通过URL形式使用javap命令只能查看指定版本类文件的反编译结果。 (3)javap命令直接将结果打印到控制台。 (4)常用查看汇编的命令:javap -c。......

天然玩家的博客 1万+

基于深度强化学习的无地图移动机器人导航:让机器人在未知环境中智能前行

虽然仍然面临sim-to-real差距、安全性保证等挑战,但随着算法的不断改进和计算能力的提升,基于DRL的无地图导航技术将在服务机器人、工业自动化、太空探索等领域发挥越来越重要的作用,为人类生产和生活带来更大便利和价值。对于复杂环境下的动态目标导航问题,研究人员提出了多智能体协同控制算法(如Teamwork-Net算法),通过多个智能体分别控制机器人的运动速度与运动方向,协同实现更高效、更稳定的导航性能。深度强化学习结合了深度学习的感知能力和强化学习的决策能力,非常适合解决无地图导航问题。

weixin_45131592的博客 903

javap反编译字节码详解<转载>

## javap反编译字节码详解 package com.zjj; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * create by zhaojiang02 2019-06-01 */ public final class ClassFileTest { private int privateint = 1; private static int priva

打发人间理想的博客 683

【RF】Receiver Function接收函数:从理论到实践的深度解析

本文深入解析地震学中的接收函数(Receiver Function, RF)技术,从理论原理到实践操作。文章将RF比作地球的“听诊器”,详细阐述了其通过反褶积剥离震源影响、揭示地下结构(如莫霍面)的核心机制,并提供了使用Python和rf库进行数据处理、计算、动校正与叠加的完整实战流程,同时探讨了其应用、局限性与常见问题的解决方案。

Jerry的专栏 122

【ComfyUI】Wan2.2 + IndexTTS 图像数字人或动物口播视频生成

本文介绍了一个基于ComfyUI的数字人口播视频生成工作流,整合了IndexTTS和图像处理技术。该系统通过多模型协同工作,实现从形象图、文本和音频输入到自动生成口播视频的全流程。核心包含WanVideo系列模型,通过CLIP Vision、T5文本编码器和Wav2Vec语音模型分别处理视觉特征、语义理解和口型同步。工作流涵盖素材加载、特征提取、音频处理和视频生成等节点,支持人物、动物等多种主体的口播内容创作。该方案自动化程度高,适用于知识讲解、剧情旁白等多种场景,能帮助创作者高效产出高质量口播视频。

Mr数据杨 2060

使用 javap 深入查看类文件

Java 开发人员熟悉在一个循环中使用StringBuffer 来代替串联 String 对象能获得最佳性能。然而,多数开发人员从来没有比较两种方法产生的字节代码的区别。在 Java 开发工具包(JDK)中有一个叫做 javap 的工具可以告诉你为什么这样做可以获得最佳性能。 on error resume next ShockMode = (IsOb

猫儿左左技术&生活空间 1453

【完整梳理验证】企业微信第三方应用接入全流程java版

由企业内部的开发者自己开发部署,相当于是企业自己的资产,调用接口基本没有任何限制。由SaaS服务商的开发者开发并部署在服务商侧,面向所有企业。需要企业授权使用(先试用后付费),服务商仅可获取企业授权部分的权限,相当于白名单控制。由服务商的开发者开发,但部署在企业内部。一般是线下签约采购方式,因此权限几乎与自建应用无异,企业管理员只需要配置不对服务商开放的敏感权限,相当于黑名单控制。服务商后台地址:企业微信服务商官网企业管理后台地址:企业微信管理后台服务商,可以理解为 SAAS 中的运营端。企业管理端,可以理

Hello, New World! 2768

用javap 反汇编帮你理解java特性 (使用 javap 深入查看类文件)

转载于:https://www.cnblogs.com/yanpeng/archive/2009/03/27/1943356.html

weixin_34194317的博客 107

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

你知道javap么?

使用 javap 深入查看类文件 Java 开发人员熟悉在一个循环中使用StringBuffer 来代替串联 String 对象能获得最佳性能。然而,多数开发人员从来没有比较两种方法产生的字节代码的区别。在 Java 开发工具包(JDK)中有一个叫做 javap 的工具可以告诉你为什么这样做可以获得最佳性能。  Javap 将一个类和它的方法的一些转储信息输出到标准输出。该工具不把代码反编

thinkpadleo的专栏 901

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

javap反编译命令的使用

javap反编译命令的使用   用习惯了著名的反编译工具jad的话,如果有的时候单给出class文件,要快速看这个class文件  的JDK版本号等,其实不用工具,也可以用JDK自带的javap命令进行反编译输出,下面小结  其用法:  1,javap -verbose  类名     得到的信息如下:  Compiled from "Test.java"  p

jack 专栏 5246

第三章 类文件结构与javap的使用

注:本文主要参考自《深入理解java虚拟机(第二版)》   1、javap的使用与类文件结构 使用过程: java源代码: 1 package compile; 2 /** 3 * class字节码 4 */ 5 public class TestClass { 6 private int m; 7 8 public i...

weixin_34115824的博客 104

javap命令

javap定义 javap是 Java class文件分解器,可以反编译(即对javac编译的文件进行反编译),也可以查看java编译器生成的字节码。用于分解class文件。 测试类 public class JavapTest { private static final int _P_1 = 1; public static final int _P_2 = 2; public static void main(String[] args) { int m = 0, n = 0; f.

weixin_41948645的博客 1117

说说javap命令

javap定义 javap是 Java class文件分解器,可以反编译(即对javac编译的文件进行反编译),也可以查看java编译器生成的字节码。用于分解class文件。 测试类 public class JavapTest { private static final int _P_1 = 1; public static final int _P_2 = 2; public static...

Jason的学习笔记 746

IDEA中实时编译java文件-javac,javap

IDEA提供了可以在其内部执行java相关指令的途径 1、打开设置搜索 External Tools 2、点击+ ,添加相关指令 个人参数设置: Program: JAVAHOMEJAVA_HOMEJAVAH​OME\bin\javap.exe Arguments : -c FileClassFileClassFileClass Working directory: OutputPathOu...

雪落南城的博客 3135

javap的使用

javap是jdk自带的一个工具,可以反编译,也可以查看java编译器生成的字节码,是分析代码的一个好工具。 javap - Java class文件分解器   分解class文件 摘要:   javap [ options ] class. . . 描述:   javap命令分解一个class文件,它根据options来决定到底输出什么。如果没有使用option

358

javap

javap定义 javap是 Java class文件分解器,可以反编译(即对javac编译的文件进行反编译),也可以查看java编译器生成的字节码。用于分解class文件。 javap命令参数 C:\&gt;javap -help 用法: javap &lt;options&gt; &lt;classes&gt; 其中, 可能的选项包括: -help --help -? ...

点点的博客 439

javap学习总结

javap的基本用法 http://blog.youkuaiyun.com/hantiannan/article/details/7659904 javap是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码。通过它,我们可以对照源代码和字节码,从而了解很多编译器内部的工作。 语法:   javap [ 命令选项 ] class. . .   javap 命令用于解析类文件。其输

bcbobo21cn的专栏 1391

idea 中添加javap

平时敲代码,有时会需要看class的内部结果,使用java自带的工具javap,非常不错。现在放在idea,可以方便随时查看。 主要三个配置: Program: C:\Program Files\Java\jdk1.8.0_151\bin\javap.exe Arguments: -verbose $FileNameWithoutAllExtensions$.clas...

CrazyTiger的博客 1385
上一篇: WEB远程调用工具DWR 1.0RC3新版发布
下一篇: 关于redsaga放出的subversion文档的声明
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值