java -p_javap命令详解 - JackieYeah的个人空间 - OSCHINA - 中文开源技术交流社区
一、用法
javap [ 選項 ] classes
二、描述
javap命令反匯編一個或多個類文件。它的輸出由使用的選項決定。如果沒有使用選項,javap命令將打印輸出傳遞給它的類的包, protected和public屬性和方法。javap打印輸出到標準輸出。
選項
命令行選項。
classes
一個或多個(由空格隔開)的待處理的類列表。你可以指定一個可以在類路徑上找到的類,通過文件名(例如,C:\myproject\src\DocFooter.class),或者使用一個URL (例如,file:///C:/myproject/src/DocFooter.class)。
例如,編譯下面聲明的類:
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);
}
}
執行javap DocFooter(官網上是
javap DocFooter.class
,但在下面實踐的時候會提示ERROR:cound not find
DocFooter.class
,需要去掉.class后綴)得到的輸出結果如下:
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 -c DocFooter(同上,需要去掉.class后綴)
得到的輸出結果如下:
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."":()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."":()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
}
三、選項
-help
--help
-?
打印輸出javap的幫助信息。
-l
打印線和局部變量表。
-public
只顯示public類及成員。
-protected
只顯示protected和public類及成員。
-package
只顯示包, protected和public類及成員。這是默認的。
-private
-p
顯示所有類及成員。
-Jflag
直接將flag傳遞給運行期系統。例如:
javap -J-version
javap -J-Djava.security.manager -J-Djava.security.policy=MyPolicy MyClassName
-s
打印內部的類型簽名。
-sysinfo
顯示正在被處理的類的系統信息(路徑, 大小, 日期, MD5 hash)。
-constants
顯示static final常量.
-c
打印輸出反匯編的代碼,例如,對于類中的每一種方法,包含Java字節碼的指令。這些在Java Virtual Machine Specification文檔中有描述。
-verbose
打印堆棧大小,方法中局部變量和參數個數。
-classpathpath
指定javap命令用來查找類的路徑。如果指定了它的值,將會覆蓋默認的或是在CLASSPATH環境變量中的值。
-bootclasspathpath
指定加載bootstrap類的路徑。bootstrap類默認指的是在jre\lib\rt.jar和一些其他jar文件中實現了Java平臺核心的類。
-extdirsdirs
覆蓋尋找已安裝的擴展的路徑。默認的擴展安裝路徑是java.ext.dirs的值。
總結
以上是生活随笔為你收集整理的java -p_javap命令详解 - JackieYeah的个人空间 - OSCHINA - 中文开源技术交流社区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教务管理系统数据字典mysql_数据库课
- 下一篇: 当输入www.baidu.com会发生什