JavaSE——javac、javap、jad

it2026-10-05  4

一、javac

用法:javac <选项> <源文件>

其中,可能的选项包括:

  -help                            帮助信息

  -g                                 生成所有调试信息

  -g:none                        不生成任何调试信息

  -g:{lines,vars,source}    只生成某些调试信息

  -nowarn                        不生成任何警告

  -verbose                        输出有关编译器正在执行的操作的消息

  -deprecation                  输出使用已过时的 API 的源位置

  -classpath <路径>          指定查找用户类文件的位置

  -cp <路径>                    指定查找用户类文件的位置

  -sourcepath <路径>       指定查找输入源文件的位置

  -bootclasspath <路径>    覆盖引导类文件的位置

  -extdirs <目录>              覆盖安装的扩展目录的位置

  -endorseddirs <目录>     覆盖签名的标准路径的位置

  -d <目录>                     指定存放生成的类文件的位置

  -encoding <编码>           指定源文件使用的字符编码

  -source <版本>              提供与指定版本的源兼容性

  -target <版本>               生成特定 VM 版本的类文件

  -version                         版本信息

  -help                             输出标准选项的提要

  -X                                 输出非标准选项的提要

  -J<标志>                       直接将 <标志> 传递给运行时系统

二、javap

用法:  javap [ 命令选项 ] class. . .

  javap 命令用于解析类文件。其输出取决于所用的选项。若没有使用选项,javap 将输出传递给它的类的 public 域及方法。javap 将其输出到标准输出设备上。

命令选项  

  -help              输出 javap 的帮助信息。

  -l                 输出行及局部变量表。

  -b                 确保与 JDK 1.1 javap 的向后兼容性。

  -public              只显示 public 类及成员。

  -protected                      只显示 protected 和 public 类及成员。

  -package                        只显示包、protected 和 public 类及成员。这是缺省设置。

  -private                          显示所有类和成员。

  -J[flag]                           直接将 flag 传给运行时系统。

  -s                                   输出内部类型签名。

  -c                                   输出类中各方法的未解析的代码,即构成 Java 字节码的指令。

  -verbose                         输出堆栈大小、各方法的 locals 及 args 数,以及class文件的编译版本

  -classpath[路径]               指定 javap 用来查找类的路径。如果设置了该选项,则它将覆盖缺省值或 CLASSPATH 环境变量。目录用冒号分隔。

  - bootclasspath[路径]        指定加载自举类所用的路径。缺省情况下,自举类是实现核心 Java 平台的类,位于 jrelibt.jar 和 jrelibi18n.jar 中。

  -extdirs[dirs]                   覆盖搜索安装方式扩展的位置。扩展的缺省位置是 jrelibext。

 三、jad

用法:

  jad 选项 class文件

 -a         - 用JVM字节格式来注解输出 -af         - 同 -a,但是注解的时候用全名称 -clear         - 清除所有的前缀 -b          - 输出多于的括号 (e.g., if(a) { b(); }, default: no) -d <dir>        - 指定输出文件的文件目录 -dead                    -试图反编译代码的dead 部分(default: no) -disass       - 不用用字节码的方式反编译 (no JAVA source generated) -f           - 输出整个的名字,无论是类还是方法 -ff           -输出类的成员在方法之前 (default: after methods) -i           - 输出所有的变量的缺省的最初值 -l<num>       - 将strings分割成指定数目的块的字符 (default: no) -lnc           - 将输出文件用行号来注解 (default: no) -nl           - 分割strings用新行字符 newline character (default: no) -nodos         -不要去检查class文件是否以dos方式写 (CR before NL, default: check) -nocast         - 不要生成辅助文件 -nocode         -不要生成方法的源代码 -noconv         - 不要转换java的定义符 (default: do) -noctor         - 不允许空的构造器存在 -noinner         -关掉对内部类的支持 (default: turn on) -nolvt            - 忽略局部变量的表信息 -nonlb         - 不要输出一个新行在打开一个括号之前 (default: do) -o           - 无需确认直接覆盖输出 (default: no) -p           - 发送反编译代码到标准输出 STDOUT (e.g., for piping) 其次.常用命令

  jad -o -r -sjava -dsrc test.class

-r表示保持原始package结构-dsrc表示output目录为当前的src目录-sjava表示反编译后的后缀为.java

tree目录下的所有*.class文件     jad -o -r -sjava -dsrc tree/**/*.class

    unix可以表示为:jad -o -r -sjava -dsrc 'tree/**/*.class'

指定输出文件的名字的话,用以下的转移命令

jad -p example1.class > myexm1.java 输出带字节码注释和源码的(最常用)   jad -o -a Test.class > ss.java

转载于:https://www.cnblogs.com/mingcaoyouxin/p/4164964.html

最新回复(0)