Javadoc答应你基于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 ?Cc能知道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的情况下。