javap指令

javap指令

起男 66 2022-12-06

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