天天看點

javap 指令1、使用javap –help 檢視option2、常用指令javap -c Clazz

javap -反彙編class檔案,生成位元組碼

1、使用javap –help 檢視option

D:\workspace\syn\src\test\java\test>javap –help

用法: javap

其中, 可能的選項包括:

-help –help -? 輸出此用法消息

-version 版本資訊

-v -verbose 輸出附加資訊

-l 輸出行号和本地變量表

-public 僅顯示公共類和成員

-protected 顯示受保護的/公共類和成員

-package 顯示程式包/受保護的/公共類

和成員 (預設)

-p -private 顯示所有類和成員

-c 對代碼進行反彙編

-s 輸出内部類型簽名

-sysinfo 顯示正在處理的類的

系統資訊 (路徑, 大小, 日期, MD5 散列)

-constants 顯示最終常量

-classpath 指定查找使用者類檔案的位置

-cp 指定查找使用者類檔案的位置

-bootclasspath 覆寫引導類檔案的位置

2、常用指令javap -c Clazz

以以下代碼為例

public class FinallyTest {
    public static void main(String[] args) {
        System.out.println("return value of getValue(): " + getValue());
    }
    public static int getValue() {
        int i = ;
        try {
            return i;
        } finally {
            i++;
        }
    }
}
           

javap -c FinallyTest 結果:

public class test.FinallyTest {
  public test.FinallyTest();
    Code:
       : aload_0
       : invokespecial #                  // Method java/lang/Object."<init>":
()V
       : return

  public static void main(java.lang.String[]);
    Code:
       : getstatic     #                  // Field java/lang/System.out:Ljava/
io/PrintStream;
       : new           #                  // class java/lang/StringBuilder
       : dup
       : invokespecial #                  // Method java/lang/StringBuilder."<
init>":()V
      10: ldc           #5                  // String return value of getValue()
:
      12: invokevirtual #6                  // Method java/lang/StringBuilder.ap
pend:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      15: invokestatic  #7                  // Method getValue:()I
      18: invokevirtual #8                  // Method java/lang/StringBuilder.ap
pend:(I)Ljava/lang/StringBuilder;
      21: invokevirtual #9                  // Method java/lang/StringBuilder.to
String:()Ljava/lang/String;
      24: invokevirtual #10                 // Method java/io/PrintStream.printl
n:(Ljava/lang/String;)V
      27: return

  public static int getValue();
    Code:
       0: iconst_1
       1: istore_0
       2: iload_0
       3: istore_1
       4: iinc          0, 1
       7: iload_1
       8: ireturn
       9: astore_2
      10: iinc          0, 1
      13: aload_2
      14: athrow
    Exception table:
       from    to  target type
           2     4     9   any
}
           

指令執行情況:

javap 指令1、使用javap –help 檢視option2、常用指令javap -c Clazz

javap 指令1、使用javap –help 檢視option2、常用指令javap -c Clazz

參考:https://www.ibm.com/developerworks/cn/java/j-lo-finally/