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在编译时都会自动生成局部变量表、指令和代码行偏移量映射表等信息