分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
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查看编译版本》
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/2e19ffb3303a490d20ea5d00dd397156.gif)