一般情况下,作为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.youkuaiyun.com/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为各成员函数输出实际已编译过的字节代码
初识javap
最新推荐文章于 2024-03-23 19:29:38 发布