概述:
javap是 Java class文件分解器,可以反编译,也可以查看java编译器生成的字节码,从而对代码内部的执行逻辑进行分析。
语法:
把java文件编译为class文件:javac Test.java (Test.java为java文件名) 生成对应的 .class 文件 Test.class
执行javap操作:javap 命令行 class文件名称(不加 .class后缀)
例如: javap -c Test
命令行
-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 平台的类,位于 jrelibt.jar 和 jrelibi18n.jar 中。 -extdirs[dirs] 覆盖搜索安装方式扩展的位置。扩展的缺省位置是 jrelibext。
示例:
一个Demo.java文件(存放在桌面)
class Demo
{
public static void main(String[] args)
{
Integer aInteger = 56;
int aInt=0;
int aInt2 = 123;
String s="helloworld";
String aString = new String("IamString");
}
}
执行命令行操作
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0NXYFhGd192UvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jM1kTNzYDN0EjNxgDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
反汇编结果
Compiled from "Demo.java"
class Demo {
Demo();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: bipush 56
2: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
5: astore_1
6: iconst_0
7: istore_2
8: bipush 123
10: istore_3
11: ldc #3 // String helloworld
13: astore 4
15: new #4 // class java/lang/String
18: dup
19: ldc #5 // String IamString
21: invokespecial #6 // Method java/lang/String."<init>":(Ljava/lang/String;)V
24: astore 5
26: return
}
对其中的语法不清楚啊?可以参照一下这两篇博客:
javap -c 命令详解 http://blog.csdn.net/junsure2012/article/details/7099222
JVM字节码之整型入栈指令(iconst、bipush、sipush、ldc) http://www.cnblogs.com/luyanliang/p/5498584.html
如果还不清楚,放大招了:
ORACLE 官方文档 Chapter 4. The
class
File Format http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html