用Javap反编译帮你理解Java特性-Java基础-Java-编程开发
来源:互联网 发布:淘宝直通车在哪里 编辑:程序博客网 时间:2024/06/07 02:58
Javap 将一个类和它的方法的一些转储信息输出到标准输出。该工具不把代码反编译为 java 源代码,但是它会把字节代码反汇编成为由 Java 虚拟机规范定义的字节代码指令。
在你需要查看编译器为你或者给你做了什么的时候,或者你想要看一处代码的改动对编译后的类文件有什么影响的时候,javap 相当有用。
现在以我们前面提到的 StringBuffer 和 String 作为一个例子。下面是一个专门为例子设计的类,它有两个方法,都返回一个由0到 n 的数字组成的 String,其中 n 由调用者提供。两个方法唯一的区别在于一个使用 String 构建结果,另外一个使用 StringBuffer 构建结果。
public class JavapTip {
public static void main(String []args) {}
private static String withStrings(int count) {
String s = "";
for (int i = 0; i < count; i ) {
s = i;
}
return s;
}
private static String withStringBuffer(int count) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < count; i ) {
sb.append(i);
}
return sb.toString();
}
}
运行方式如下:
> javap -c JavapTip
此命令的输出为: Method java.lang.String withStrings(int)
0 ldc #2
2 astore_1
3 iconst_0
4 istore_2
5 goto 30
8 new #3
11 dup
12 invokespecial #4
15 aload_1
16 invokevirtual #5
19 iload_2
20 invokevirtual #6
23 invokevirtual #7
26 astore_1
27 iinc 2 1
30 iload_2
31 iload_0
32 if_icmplt 8
35 aload_1
36 areturn
Method java.lang.String withStringBuffer(int)
0 new #3
3 dup
4 invokespecial #4
7 astore_1
8 iconst_0
9 istore_2
10 goto 22
13 aload_1
14 iload_2
15 invokevirtual #6
18 pop
19 iinc 2 1
22 iload_2
23 iload_0
24 if_icmplt 13
27 aload_1
28 invokevirtual #7
31 areturn
withStringBuffer 方法与这个方法正好相反,在每次循环的时候 withStringBuffer 只调用现有 StringBuffer 的 append 方法,没有创建新的对象,也没有新的 String 引用。
在这种情况下,我们已经知道了使用 StringBuffer 代替 String 是一种好的做法,但是如果我们不知道呢?那么 javap 可以帮助我们找到答案。在这里你可以看到更详细的关于String,StringBuffer 的解释
你并不会经常需要一个 Java 反汇编器,但是当你需要的时候,知道你自己的机器已经有一个并且用法相当简单的反汇编器当然是一件好事。如果你感兴趣,看书看看 javap 的其它选项——或许你会发现在你的环境中需要的特性。
- 用Javap反编译帮你理解Java特性-Java基础-Java-编程开发
- 用Javap反编译帮你理解Java特性
- 用javap 反汇编帮你理解java特性
- [java]javap命令行反编译
- Java 反编译命令javap
- java反编译javap
- Java 反编译命令javap
- 谈谈JAVA程序的反编译-Java基础-Java-编程开发
- 使用javap反编译Java字节码文件
- 使用javap反编译Java字节码文件
- javap 反编译Java class字节码
- javap反编译java字节码文件
- 比喻帮你深入理解 JAVA 对象
- 关于Java自增的debug和javap反编译
- 理解JDIC中的文件类型关联-Java基础-Java-编程开发
- 你知道的Java和你不知道的Java-Java基础-Java-编程开发
- 帮你理解java中的堆和栈
- 帮你深入理解 JAVA 对象创建的过程
- 两种特殊的Java容器类List和Set分析-Java基础-Java-编程开发
- 除岁迎新 Java 2005回顾
- Java实现利用搜索引擎收集网址的程序-Java基础-Java-编程开发
- 2005年度Java十大新技术和新产品-Java基础-Java-编程开发
- Java在Client/Server网络中的应用-Java基础-Java-编程开发
- 用Javap反编译帮你理解Java特性-Java基础-Java-编程开发
- 揭开Java 安全标准的神秘面纱-Java基础-Java-编程开发
- 用Java实现回调例程-Java基础-Java-编程开发
- 理解Java面向对象的程序设计思想-Java基础-Java-编程开发
- 浅析Java多线程程序设计机制-Java基础-Java-编程开发
- 将Java程序变成Windows系统服务-Java基础-Java-编程开发
- Java初学者需掌握的30个基本概念-Java基础-Java-编程开发
- 面向Java程序员的Ajax:构建动态Java程序-Java基础-Java-编程开发
- JDBC 入门-Java基础-Java-编程开发