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的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值