1、javap

      1.1  javap是JDK自带的反解析工具;

      1.2  作用:就是根据class字节码文件,反解析出    当前类   对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息;

      1.3  常用的命令:

            javap -c   

              对当前class字节码进行反编译生成汇编代码;

            javap -l

              会输出行号和本地变量表信息;

            javap -v 

              会输出行号、本地变量表信息、反编译汇编代码,还会输出当前类用到的常量池等信息;

      1.4  案例:

      

package yunsuanfu;

public class Test {

    public static void main(String[] args){
plusTest();
plusTestTwo();
} /**
* a++:先参与运算(System.out.println(a))、再进行自增(a++ 等效于a=a+1)
* ++a:先自增(a++),再参与运算(System.out.println(a))
*
* 结果是:9、11
*/
public static void plusTest(){
int a=9;
System.out.println(a++);
System.out.println(++a);
} /**
* y+=z--/++x 等效于 y=y+z--/++x y=2+3/2
*
* 结果是:3
*/
public static void plusTestTwo(){
int x=1,y=2,z=3;
System.out.println(y+=z--/++x);
}
}

  

javap -c Test.class

Compiled from "Test.java"
public class yunsuanfu.Test {
public yunsuanfu.Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return public static void main(java.lang.String[]);
Code:
0: invokestatic #2 // Method plusTest:()V
3: invokestatic #3 // Method plusTestTwo:()V
6: return public static void plusTest();
Code:
0: bipush 9
2: istore_0
3: getstatic #4 // Field java/lang/System.out:Ljava/io/PrintStream;
6: iload_0
7: iinc 0, 1
10: invokevirtual #5 // Method java/io/PrintStream.println:(I)V
13: getstatic #4 // Field java/lang/System.out:Ljava/io/PrintStream;
16: iinc 0, 1
19: iload_0
20: invokevirtual #5 // Method java/io/PrintStream.println:(I)V
23: return public static void plusTestTwo();
Code:
0: iconst_1
1: istore_0
2: iconst_2
3: istore_1
4: iconst_3
5: istore_2
6: getstatic #4 // Field java/lang/System.out:Ljava/io/PrintStream;
9: iload_1
10: iload_2
11: iinc 2, -1
14: iinc 0, 1
17: iload_0
18: idiv
19: iadd
20: dup
21: istore_1
22: invokevirtual #5 // Method java/io/PrintStream.println:(I)V
25: return
}

  

JavaSE---JDK提供的命令行工具---javap的更多相关文章

  1. jdk 自带命令行工具

    jps工具 虚拟机进程状况工具 工具主要选项 jstat: 虚拟机统计信息监视工具 jinfo: Java配置信息工具 jinfo( Configuration Info for Java) 的作用是 ...

  2. JMeterPluginCMD命令行工具使用详解

    MeterPluginCMD命令行工具生成png图片和csv统计文件 Jmeter是个纯java的开源的轻量级性能测试工具,功能强大.因为是轻量级的,与loadrunner相比,报告统计的相对较少.不 ...

  3. 微软开放技术发布针对 Mac 和 Linux 的更新版 Azure Node.JS SDK 和命令行工具

    发布于 2013-12-04 作者 Eduard Koller 这次为我们使用Linux 的朋友带来了更多关于部署云上虚拟机的消息.今天,微软开放技术有限公司 (MS Open Tech),想与大家分 ...

  4. Windows2008安装组件命令行工具ServerManagerCmd用法介绍

    转自:http://blog.sina.com.cn/s/blog_537de4b5010128al.html Windows2008 安装组件服务等内容比原来复杂的多,用鼠标点来点去,既繁琐也缓慢, ...

  5. Scrapy命令行工具简介

    Windows 10家庭中文版,Python 3.6.4,virtualenv 16.0.0,Scrapy 1.5.0, 在最初使用Scrapy时,使用编辑器或IDE手动编写模块来创建爬虫(Spide ...

  6. JDK的命令行工具系列 (二) javap、jinfo、jmap

    javap: 反编译工具, 可用来查看java编译器生成的字节码 参数摘要: -help 帮助 -l 输出行和变量的表 -public 只输出public方法和域 -protected 只输出publ ...

  7. JDK的命令行工具

    Jcmd:综合工具 jcmd -l  列出当前运行的所有虚拟机 参数-l表示列出所有java虚拟机,针对每一个虚拟机,可以使用help命令列出该虚拟机支持的所有命令 jcmd [pid] help j ...

  8. JVM-JDK命令行工具

    JDK命令行工具 当我们进入JDK的安装目录里面的/bin目录,会发现有很多小工具,有我们熟悉的也经常用的java,javac,也有很多我们不怎么用到很陌生的工具.下面看看哪些平时不怎么用到的工具吧. ...

  9. 虚拟机性能监控与故障处理工具------JDK的命令行工具

    ①jps:虚拟机进程状况工具 功能:列出正在运行的虚拟机进程,并显示1.虚拟机执行主类名称以及2.这些进程的本地虚拟机唯一ID(LVMID). 使用频率最高的JDK命令行工具,其他的JDK工具大多需要 ...

随机推荐

  1. ORACLE错误:ORA-28001: the password has expired解决方法

    Oracle提示错误消息ORA-28001: the password has expired,是由于Oracle11G的新特性所致, Oracle11G创建用户时缺省密码过期限制是180天(即6个月 ...

  2. hdu 5511 Minimum Cut-Cut——分类讨论思想+线段树合并

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5511 题意:割一些边使得无向图变成不连通的,并且恰好割了两条给定生成树上的边.满足非树边两段一定在给定生成 ...

  3. UE4在PSVR中的抗锯齿和优化相关知识

    UE4目前版本(4.15)在PS平台上并不支持MSAA,在未来的版本会加入.也就是说目前没有办法在PS平台上使用Forward Rendering + MSAA的组合 FXAA效率最高,但效果最差,只 ...

  4. 字符串(二):string

    字符串使用方法整理 系列: 字符串(一):char 数组 字符串(二):string string 是 C++ STL 的一个字符串类型,原型是 vector<char> 并对字符串处理做 ...

  5. 一些比较好的blogs

    01Trie水过普通平衡树 MinMax容斥 Trie与可持久化Trie 圆方树 CDQ分治 网络流 有上下界的网络流 Mobius函数 组合数学盒子小球 dsu on tree VFK大爷的反演课件 ...

  6. Vagrant 手册之网络 - 公共网络 public network

    原文地址 Vagrantfile 配置文件中公共网络的标识符:public_network,例如: config.vm.network "public_network" Vagra ...

  7. node+express解决前端跨域问题

    var express = require('express') , app = express(); //解决跨域 app.all('*',function (req, res, next) { r ...

  8. upc组队赛17 Bits Reverse【暴力枚举】

    Bits Reverse 题目链接 题目描述 Now given two integers x and y, you can reverse every consecutive three bits ...

  9. Parameter Initializations in Deep Learning

    全零初始化的问题: 在Linear Regression中,常用的参数初始化方式是全零,因为在做Gradient Descent的时候,各个参数会在输入的各个分量维度上各自更新.更新公式为: 而在Ne ...

  10. 编程语言-Java-问题整理

    jar文件运行报错 -  Exception in thread "main" java.lang.UnsupportedClassVersionError 低版本运行高版本文件 ...