技术中心

这里象征着我们的态度和能力

>javap(反汇编命令)详解
作者:中国IT实验室    来源:中国IT实验室    发布时间:2012-01-01      浏览次数:6852
分享到:
欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

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

}

4000-880-989
(24小时热线)
联系客服
微信公众号

官方公众号

小程序

©2008-2022 CORPORATION ALL Rights Reserved. 昆明奥远科技有限公司版权所有 滇ICP备09003328号-1 滇公网安备 53011102000818号 增值电信业务经营许可证号:滇B2-20110045
昆明那家网络公司好,新媒体运营,网站优化,网络推广,网站建设,网页设计,网站设计,网站推广,云南网站公司,昆明新媒体公司,云南网红主播,昆明SEO公司,昆明网站建设,昆明网络推广,昆明网站优化,昆明网站推广,红河网站建设,大理网络公司,曲靖网络公司,丽江网站设计,昭通网络公司,保山大数据服务,智慧高速建设,智慧校园服务,云南IDC服务商,网络安全测评,等保测评,网站关键词排名优化服务,服务客户尽超2000余家,一切尽在奥远科技,服务电话:13888956730