|
javap简介
原文网址 http://www.javaresearch.org/article/768.htm.
也许我们很少会使用到javap工具,因为现在有很多好的反编译工具,但是我在此介绍这个工具不是使用它进行反编译,而是查看java编译器为我们生成的字节码,通过比较字节码和源代码,我们可以发现很多的问题,一个很重要的作用就是了解很多编译器内部的工作机制,在笔者以前的几篇文章中就是借助此工具的,本站有这些文章的原文《深入剖析java类的构造方式》和《使用String还是StringBuffer》。
下面我们通过具体的一个例子来简单的讲讲这个工具的作用,你不需要很深入的使用,这个简单的介绍和简单的使用就可以使你受益非浅。
源代码:
class StringTest { public static void main(String[] args) { String result=""; result+="ok"; }} 在反编译前你当然需要先编译这个类了:javac -g StringTest.java(使用-g参数是因为要得到下面javap -l时的输出需要使用此选项)
编译完成后,我们在使用不同的选项看看不同的效果:
1、先看看最简单的不带参数的情况:javap StringTest:
Compiled from StringTest.javaclass StringTest extends java.lang.Object { StringTest(); public static void main(java.lang.String[]);} 不带参数的情况将答应类的public信息,包括成员和方法
从上面的输出中我们确定了两个知识:如果类没有显示的从其它类派生那么它就是从Object派生;如果没有为类显示的申明构造方法,那么编译器将为之生成一个缺省构造方法(不带参数的构造方法)
2、javap -c StringTest:
<div class="quote_title">输出 写道 |
|