初识javap

一般情况下,作为Java程序员,可能很少会去注意程序的编译结果(字节码.class)。 即使需要反编译.class文件,也有一些更好的工具使用,比如Java Decompiler就是一款不到700k的java 字节码反编译工具。Java Decompiler Project(http://java.decompiler.free.fr/) 但事实上,Java的字节代码向我们提供了非常有价值的信息。暂时不说性能优化和调优这么高深的问题。 至少有一个好处就是通过比较字节码和源代码,可以了解编译器内部的工作机制,比如它进行了哪些优化,比如 对for-each循环,对循环时取数组的length等等。 在这一方面,市场上也有一些书籍进行阐述。其中< <深入java虚拟机> >就是此中翘楚。一直想阅读,一直未成行。 ps:有这样一种感觉,天天做应用。这些底层的东西反而生疏了。 本篇只是对javap的一个基本介绍和一些参数的介绍。在后续的篇目中,会进行较深入的描述。 qzone的所有技术文章只是csdn blog的一个备份。更多技术内容位于 http://blog.csdn.net/cuser_online。 1.javap是什么? javap.exe是jdk中提供的一个java反编译工具。也叫Java类分解器。 它位于%JAVA_HOME%/JDK/bin目录 2.javap能干什么? avap对类名给定的文件(.class)提供的字节代码进行反编译,打印出这些类的一个可读版本。 在缺省情况下,javap打印出给定类内的公共域、方法、构造函数,以及静态初始值。 3.javap用法? 语法: javap <选项> <类名> 如:javap -c HelloWorld 不带参数的情况将打印类的public信息,包括成员和方法. 如: D:/workspace_job/Javap/src>javap -c HelloWorld Compiled from "HelloWorld.java" public class HelloWorld extends java.lang.Object{ public static void main(java.lang.String[]); Code: 0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #3; //String Hello,World! 5: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V 8: return 4.javap常用参数 在控制台下键入javap -help。有如下帮助内容: Usage: javap ... where options include: -c Disassemble the code -classpath Specify where to find user class files -extdirs Override location of installed extensions -help Print this usage message -J Pass directly to the runtime system -l Print line number and local variable tables -public Show only public classes and members -protected Show protected/public classes and members -package Show package/protected/public classes and members (default) -private Show all classes and members -s Print internal type signatures -bootclasspath Override location of class files loaded by the bootstrap class loader -verbose Print stack size, number of locals and args for methods If verifying, print reasons for failure -classpath path 此选项将使得javap在路径path中寻找Java类 -l参数将显示行号和局部变量表 -private 参数将额外的打印private成员和方法的信息 -public 参数将额外的打印public成员和方法的信息 -protected 参数将额外的打印protected和public成员和方法的信息 -c 此选项将使javap为各成员函数输出实际已编译过的字节代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值