[建立和構建應用程序的主要工具] 之 javap

官網-javaphtml

1. 簡述

反彙編一個或多個類文件。java

2. 命令

用法: javap <options> <classes>
其中, 可能的選項包括:
  -help  --help  -?        輸出此用法消息
  -version                 版本信息
  -v  -verbose             輸出附加信息
  -l                       輸出行號和本地變量表
  -public                  僅顯示公共類和成員
  -protected               顯示受保護的/公共類和成員
  -package                 顯示程序包/受保護的/公共類
                           和成員 (默認)
  -p  -private             顯示全部類和成員
  -c                       對代碼進行反彙編
  -s                       輸出內部類型簽名
  -sysinfo                 顯示正在處理的類的
                           系統信息 (路徑, 大小, 日期, MD5 散列)
  -constants               顯示最終常量
  -classpath <path>        指定查找用戶類文件的位置
  -cp <path>               指定查找用戶類文件的位置
  -bootclasspath <path>    覆蓋引導類文件的位置
複製代碼

3. example

javabash

import java.awt.*;
import java.applet.*;
 
public class DocFooter extends Applet {
        String date;
        String email;
 
        public void init() {
                resize(500,100);
                date = getParameter("LAST_UPDATED");
                email = getParameter("EMAIL");
        }
 
        public void paint(Graphics g) {
                g.drawString(date + " by ",100, 15);
                g.drawString(email,290,15);
        }
}
複製代碼

classoracle

Compiled from "DocFooter.java"
public class DocFooter extends java.applet.Applet {
  java.lang.String date;
  java.lang.String email;
  public DocFooter();
  public void init();
  public void paint(java.awt.Graphics);
}
複製代碼
javap -v -c -verbose  DocFooter
複製代碼

resultapp

Compiled from "DocFooter.java"
public class DocFooter extends java.applet.Applet {
  java.lang.String date;
  java.lang.String email;

  public DocFooter();
    Code:
       0: aload_0       
       1: invokespecial #1 // Method
java/applet/Applet."<init>":()V
       4: return        

  public void init();
    Code:
       0: aload_0       
       1: sipush        500
       4: bipush        100
       6: invokevirtual #2 // Method resize:(II)V
       9: aload_0       
      10: aload_0       
      11: ldc           #3 // String LAST_UPDATED
      13: invokevirtual #4 // Method
 getParameter:(Ljava/lang/String;)Ljava/lang/String;
      16: putfield      #5 // Field date:Ljava/lang/String;
      19: aload_0       
      20: aload_0       
      21: ldc           #6 // String EMAIL
      23: invokevirtual #4 // Method
 getParameter:(Ljava/lang/String;)Ljava/lang/String;
      26: putfield      #7 // Field email:Ljava/lang/String;
      29: return        

  public void paint(java.awt.Graphics);
    Code:
       0: aload_1       
       1: new           #8 // class java/lang/StringBuilder
       4: dup           
       5: invokespecial #9 // Method
 java/lang/StringBuilder."<init>":()V
       8: aload_0       
       9: getfield      #5 // Field date:Ljava/lang/String;
      12: invokevirtual #10 // Method
 java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      15: ldc           #11 // String by 
      17: invokevirtual #10 // Method
 java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      20: invokevirtual #12 // Method
 java/lang/StringBuilder.toString:()Ljava/lang/String;
      23: bipush        100
      25: bipush        15
      27: invokevirtual #13 // Method
 java/awt/Graphics.drawString:(Ljava/lang/String;II)V
      30: aload_1       
      31: aload_0       
      32: getfield      #7 // Field email:Ljava/lang/String;
      35: sipush        290
      38: bipush        15
      40: invokevirtual #13 // Method
java/awt/Graphics.drawString:(Ljava/lang/String;II)V
      43: return        
}
複製代碼
相關文章
相關標籤/搜索