javap

作用:反编译Java代码,查看Java字节码

用法:javap

选项:

-version:版本信息

-v:输出附加信息

-l:输出行号和本地变量表

-public:仅显示公共类和成员

-protected:显示受保护的/公共类和成员

-package:显示程序包/受保护的/公共类和成员 (默认)

-p或-private:显示所有类和成员

-c:对代码进行反汇编

-s:输出内部类型签名

-sysinfo:显示正在处理的类的系统信息 (路径, 大小, 日期, MD5 散列)

-constants:显示最终常量

-classpath :指定查找用户类文件的位置

-cp :指定查找用户类文件的位置

-bootclasspath :覆盖引导类文件的位置

除此之外,目前有很多的反编译工具可以用,来查看Java编译后的代码。如下:

JD-GUI:一个用 C++ 开发的 Java 反编译工具,由 Pavel Kouznetsov开发,支持Windows、Linux和苹果Mac Os三个平台。而且提供了Eclipse平台下的插件JD-Eclipse、IntelliJ的插件JD-IntelliJ。JD-GUI不需要安装,直接点击运行,可以反编译jar,class文件。下载地址:http://jd.benow.ca/

procyon-decompiler:支持JDK1.8类的反编译,在很多方面做得非常不错,包括字符串的Switch、枚举声明方面、注解方面、匿名类、内部类、Java8新接口规范、Java8 Lambda表达式、Java8 方法传递。另外它在反编译后输出多种类型的结果,如Java源码、原始字节码、字节码AST(抽象语法树)。下载地址:https://bitbucket.org/mstrobel/procyon/downloads/

那么为什么还要使用javap呢。其实无论是反编译工具,还是javap命令,意在让开发人员更加理解Java代码的语法糖以及Java代码在JVM中的执行过程。

这里不介绍Java字节码指令了,否则篇幅太长,容易让人犯困。