javap指令
通过javap命令可以查看一个java类反汇编得到class文件的版本号、常量池、访问表示、变量表、指令代码、行号表等信息
语法格式
javap 参数 class文件名
参数
| 参数 | 说明 |
|---|---|
| -help --help -? | 输出此用法消息 |
| -version | 版本信息(当前javap所在jdk的版本信息) |
| -v -verbose | 输出附加信息(包括行号、本地变量表、反汇译信息等),不显示私有 |
| -public | 仅显示公共类和成员 |
| -protected | 显示受保护的/公共类和成员 |
| -package | 显示程序包/受保护的/公共类 |
| -p -private | 显示程序包/受保护的/公共类和成员 (默认) |
| -c | 对代码进行反汇编(主要输出code属性) |
| -s | 输出内部类型签名(描述信息),不显示私有 |
| -sysinfo | 显示正在处理的类的系统信息 (路径, 大小, 日期, MD5 散列) |
| -constants | 显示最终常量 |
| -cp -classpath | 指定查找用户类文件的位置 |
| -bootclasspath | 覆盖引导类文件的位置 |
| -l | 输出行号和本地变量表(如果本身字节码文件没有局部变量表则不显示) |
javac -g操作
解析字节码文件得到的信息中,有些信息(局部变量表、指令和代码行偏移量、常量池 中方法的参数名等)需要使用javac编译成class文件时,指定参数才能输出
比如,直接javac,就不会生成对应的局部变量表等信息,如果添加-g就可以生成所有相关信息了。默认情况下eclipse、idea在编译时都会自动生成局部变量表、指令和代码行偏移量映射表等信息