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。
相关文章推荐
- Java 8新特性-3 Lambda 表达式
- JAVA基础--容器 Set, List, Map
- MAC JDK版本切换
- 同步,异步,阻塞,非阻塞的Java例子
- JavaWeb——文件上传和下载
- springMVC 项目根路径访问页面配置
- Java 8新特性-1 函数式接口
- Java笔记 - 线程基础知识
- # 20145334赵文豪 《Java程序设计》第5周学习总结
- 根据依赖来编译java文件,生成class
- java 抽象类与接口的区别
- java 删除linkedlist链表中重复元素
- SpringMVC - Controller 返回值的可选类型
- 由浅入深学Java Socket
- 解决eclipse闪退
- Java eclipse生成doc文档
- Java实现大数相乘
- CompressFile工具类使用,zip和rar文件解压缩与打包操作Java源代码
- 将protege-owl API的doc文档添加到eclipse的编程坏境中
- Java入门:创建多个对象