使用Javap获得不止于文档的东西

ZDNet软件频道 时间:2003-03-12 作者:翻译:Java研究组织-公飞 |  我要评论()
本文关键词:javatips
Javadoc允许你基于Java代码生成文档,但是它主要是面向于Web客户。幸运的是,存在另外的基于Java代码生成文档的方式,例如javap命令。
本文译自Builder.comJavadoc允许你基于Java代码生成文档,但是它主要是面向于Web客户。幸运的是,存在另外的基于Java代码生成文档的方式,例如javap命令。

javap是一个Java类分解工具。它能够将一个类分解为一个字节码的描述,在这些描述中告诉了你在没有进行实际的反编译类之前的一个实现是什么样的。和javac不同,javap使用class文件而不是源文件。这意味着你可以在没有任何有效的源代码的情况下在jar中的class上使用javap。

运行javap的标准方式是:

javap <classname>

在命令行上,举例如下:

javap java.lang.Object

这将输出如下信息:

Compiled from Object.java
public class java.lang.Object {
    public java.lang.Object( );
    public final native java.lang.Class getClass( );
    public native int hashCode( );
    public boolean equals(java.lang.Object);
    protected native java.lang.Object clone( ) throws java.lang.CloneNotSupportedException;
    public java.lang.String toString( );
    public final native void notify( );
    public final native void notifyAll( );
    public final native void wait(long) throws java.lang.InterruptedException;
    public final void wait(long, int) throws java.lang.InterruptedException;
    public final void wait( ) throws java.lang.InterruptedException;
    protected void finalize( ) throws java.lang.Throwable;
    static { };
}

分解代码能得到一些有用的信息,例如通过javap –c能知道Object.wait方法在执行时的情况。

Method void wait( )
   0 aload_0
   1 lconst_0
   2 invokevirtual #16 <Method void wait(long)>
   5 return

即使是对分解的代码没有很多的理解,也是很容易看出Object.wait( )只是简单的调用了Object.wait(long)。然而,传递到Object.wait(long)中的实际的值是看不到的。

分解代码是一个有用的特性,但是javap最常用的用途还是用来快速的查看一个类可用的方法,从命令行使用javap常常是更简单,即使是有源代码和javadoc的情况下。



责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134