转自:http://blog.csdn.net/hudashi/article/details/7062668

javap是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码。通过它,我们可以对照源代码和字节码,从而了解很多编译器内部的工作。
语法:
  javap [ 命令选项 ] class. . .
  javap 命令用于解析类文件。其输出取决于所用的选项。若没有使用选项,javap 将输出传递给它的类的 public 域及方法。javap 将其输出到标准输出设备上。
命令选项
  -help 输出 javap 的帮助信息。
  -l 输出行及局部变量表。
  -b 确保与 JDK 1.1 javap 的向后兼容性。
  -public 只显示 public 类及成员。
  -protected 只显示 protected 和 public 类及成员。
  -package 只显示包、protected 和 public 类及成员。这是缺省设置。
  -private 显示所有类和成员。
  -J[flag] 直接将 flag 传给运行时系统。
  -s 输出内部类型签名。
  -c 输出类中各方法的未解析的代码,即构成 Java 字节码的指令。
  -verbose 输出堆栈大小、各方法的 locals 及 args 数,以及class文件的编译版本
  -classpath[路径] 指定 javap 用来查找类的路径。如果设置了该选项,则它将覆盖缺省值或 CLASSPATH 环境变量。目录用冒号分隔。
   - bootclasspath[路径] 指定加载自举类所用的路径。缺省情况下,自举类是实现核心 Java 平台的类,位于 jrelib
  t.jar 和 jrelibi18n.jar 中。
  -extdirs[dirs] 覆盖搜索安装方式扩展的位置。扩展的缺省位置是 jrelibext。
实例1:
Hello.java文件
public class Hello
{
static void main(String args[])
{
int i=10;
int j=100;
int m=i+j;
System.out.println("m:"+m);
}
int get()
{
int a=1;
int b=2;
int c=3;
int d=4;
int e=5;
int f=6;
int n=a+b+c+d+e+f;
return n;
}
static int get2()
{
int a=1;
int b=12;
int c=39;
int d=a+b;
return d;
}
}
然后再执行以下命令:
javac Hello.java
javap -c Hello
得到
Compiled from "Hello.java"
public class Hello extends java.lang.Object{
public Hello();
  Code:
   0: aload_0
   1: invokespecial #1; //Method java/lang/Object."<init>":()V
   4: return
 
static void main(java.lang.String[]);
  Code:
   0: bipush 10
   2: istore_1
   3: bipush 100
   5: istore_2
   6: iload_1
   7: iload_2
   8: iadd
   9: istore_3
   10: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   13: new #3; //class java/lang/StringBuilder
   16: dup
   17: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V
   20: ldc #5; //String m:
   22: invokevirtual #6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   25: iload_3
   26: invokevirtual #7; //Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
   29: invokevirtual #8; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
   32: invokevirtual #9; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   35: return
 
int get();
  Code:
   0: iconst_1
   1: istore_1
   2: iconst_2
   3: istore_2
   4: iconst_3
   5: istore_3
   6: iconst_4
   7: istore 4
   9: iconst_5
   10: istore 5
   12: bipush 6
   14: istore 6
   16: iload_1
   17: iload_2
   18: iadd
   19: iload_3
   20: iadd
   21: iload 4
   23: iadd
   24: iload 5
   26: iadd
   27: iload 6
   29: iadd
   30: istore 7
   32: iload 7
   34: ireturn
 
static int get2();
  Code:
   0: iconst_1
   1: istore_0
   2: bipush 12
   4: istore_1
   5: bipush 39
   7: istore_2
   8: iload_0
   9: iload_1
   10: iadd
   11: istore_3
   12: iload_3
   13: ireturn
 
}
另外关于如何使用javap命令查看class文件的编译版本请参考《用javap查看编译版本

javap(反汇编命令)详解【转】的更多相关文章

  1. 【转】javap -c命令详解

    javap -c命令详解 一直在学习Java,碰到了很多问题,碰到了很多关于i++和++i的难题,以及最经典的String str = "abc" 共创建了几个对象的疑难杂症. 知 ...

  2. javap -c命令详解

    https://www.cnblogs.com/beautiful-code/p/6424977.html

  3. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  4. linux yum命令详解

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...

  5. Linux下ps命令详解 Linux下ps命令的详细使用方法

    http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...

  6. Docker命令详解

    Docker命令详解   最近学习Docker,将docker所有命令实验了一番,特整理如下: # docker --help Usage: docker [OPTIONS] COMMAND [arg ...

  7. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  8. android adb 命令详解

    ADB (Android Debug Bridge)  是android SDK中的工具,需要先配置环境变量才能使用.起调试桥的作用,可以管理安卓设备.(也叫debug工具) ---------查看设 ...

  9. Git 常用命令详解

    Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) Git 的更多介绍 ...

  10. Top 命令详解

    Top 命令详解 先感受一下top命令的执行结果吧!哈哈-- top - 17:32:34 up 3 days, 8:04, 5 users, load average: 0.09, 0.12, 0. ...

随机推荐

  1. 与(and)&&

    /与(and)&& var box = (5>3)&&(4>3); alert(box); //true 如果脸变的操作数有一个操作数不是boolean值得 ...

  2. JQuery: JQuery效果(隐藏、显示、切换,滑动,淡入淡出,以及动画)

    JQuery:效果 JQuery效果有很多,包括隐藏.显示.切换,滑动,淡入淡出,以及动画等.隐藏:JQuery hide() 显示:JQuery show() 切换:JQuery toggle() ...

  3. saltstack之(一)系统环境及本地yum源

    1.服务器环境node1:192.168.3.1node2:192.168.3.2 2.主机名和hosts文件node1: node1.xkops.com --主机名[root@node1 ~]# t ...

  4. eclipse中tomcat能正常启动,但是浏览器访问不了tomcat首页

    在eclipse中新建tomcat7,完成后tomcat能够正常启动,但是浏览器问题localhost:8080访问不了. 解决方法如下: 双击eclipse中服务器中的tomcat 出现tomcat ...

  5. ThreadLocal 多线程并发,数据隔离

    ThreadLocal:  创建一个线程本地变量. 本质:在ThreadLocal类中有一个Map,用于存储每一个线程的变量的副本. 优点:既实现多线程并发,游兼顾数据的安全性. 区别:Synchro ...

  6. 分享一个移动项目中消除click事件点击延迟的方法

    对于前端工程师来说,apicloud无疑给我们提供了很好的平台,有各种各样的模块供我们使用,但是在实际项目的时候,很大部分的代码,还是需要我们用html css js来实现的.但是呢,移动端页面对于c ...

  7. Eclipse中添加Android系统jar包

    这样做的好处是,可以使用Eclipse开发系统应用了,这样可以调用系统中才使用的API. 1.首先在项目中右击->属性.如图所示依次操作 2.添加User Library 3.第一次要新建Use ...

  8. 【Android】ListView监听上下滑动(判断是否显示返回顶部按钮

    设置滚动监听判断ListView的滚动方向同时获取屏幕高度.ListView实际高度,判断是否需要展示返回顶部按钮 package com.zihao.activity;   import java. ...

  9. Tigase Server Clustering

    首先,在服务器上启用集群 修改init.properties --cluster-mode=true 自定义端口 允许自定义,但是所有的实例都要使用相同的端口,以便通讯 --cl-comp-ports ...

  10. Lintcode: Sort Letters by Case

    Given a string which contains only letters. Sort it by lower case first and upper case second. Note ...