您的位置:首页 > 编程语言 > Java开发

javap(反编译)

2016-04-05 13:18 381 查看

参数简介:

  --help  -?               输出此用法消息
-version                 版本信息
-v  -verbose             输出附加信息
-l                       输出行号和本地变量表
-public                  仅显示公共类和成员
-protected               显示受保护的/公共类和成员
-package                 显示程序包/受保护的/公共类
和成员 (默认)
-p  -private             显示所有类和成员
-c                       对代码进行反汇编
-s                       输出内部类型签名
-sysinfo                 显示正在处理的类的
系统信息 (路径, 大小, 日期, MD5 散列)
-constants               显示最终常量
-classpath <path>        指定查找用户类文件的位置
-cp <path>               指定查找用户类文件的位置
-bootclasspath <path>    覆盖引导类文件的位置


应用实例:

a = a ++;会怎么样?

代码:

public class A {
public static void main(String[] args) {
int a = 1;
a = a ++;
System.out.printf(a+"");
}
}


命令:

➜  classes javap -c A


结果:

Compiled from "A.java"
public class A {
public A();
Code:
0: aload_0
1: invokespecial #1                  // Method java/lang/Object."<init>":()V
4: return

public static void main(java.lang.String[]);
Code:
0: iconst_1
1: istore_1
2: iload_1
3: iinc          1, 1
6: istore_1
7: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
10: new           #3                  // class java/lang/StringBuilder
13: dup
14: invokespecial #4                  // Method java/lang/StringBuilder."<init>":()V
17: iload_1
18: invokevirtual #5                  // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
21: ldc           #6                  // String
23: invokevirtual #7                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
26: invokevirtual #8                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
29: iconst_0
30: anewarray     #9                  // class java/lang/Object
33: invokevirtual #10                 // Method java/io/PrintStream.printf:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
36: pop
37: return
}


重点是:

2: iload_1              //把第一个临时变量取出来放在栈顶
3: iinc          1, 1   //自增第一个临时变量
6: istore_1             //把栈顶的数据存回第一个临时变量


so , 明白了

你可以试着反汇编出a = ++ a。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: