javap反编译命令的使用

用习惯了著名的反编译工具jad的话,如果有的时候单给出class文件,要快速看这个class文件
的JDK版本号等,其实不用工具,也可以用JDK自带的javap命令进行反编译输出,下面小结
其用法:

1,javap -verbose  类名
   得到的信息如下:

Compiled from "Test.java"
public class Test extends java.lang.Object
  SourceFile: "Test.java"
  minor version: 0
  major version: 50
  Constant pool:
......

  可以看出jdk的版本,这个用在判断某些CLASS的版本是否兼容的时候很有用.

2 最常见的不带参数的情况:javap 类名

比如某个类:
 
package test;
 
public class Test {
 
    int number = 5;
 
    public void sayHello() {
        System.out.println("Hello");
    }
}


  则:
   C:\temp\javaptest>javap Test
Compiled from "Test.java"
public class test.Test extends java.lang.Object{
    int number;
    public test.Test();
    public void sayHello();
}

带参数-c:
  则可以看到字节码了:

C:\temp\javaptest>javap -c Test
Compiled from "Test.java"
public class test.Test extends java.lang.Object{
int number;
 
public test.Test();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   aload_0
   5:   iconst_5
   6:   putfield        #2; //Field number:I
   9:   return
 
public void sayHello();
  Code:
   0:   getstatic       #3; //Field java/lang/System.out:Ljava/io/PrintStream;
   3:   ldc     #4; //String Hello
   5:   invokevirtual   #5; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   8:   return
 
}


带参数-l: 将显示行号和局部变量表

-public 只显示 public 类及成员。
  -protected 只显示 protected 和 public 类及成员。
  -package 只显示包、protected 和 public 类及成员。这是缺省设置。
  -private 显示所有类和成员。

你可能感兴趣的:(jdk)