服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

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


  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的情况下。

扫描关注微信公众号