了解过字节码文件的组成吗?
关联课程内容
- 基础篇-字节码文件的组成
- 基础篇-字节码文件的工具
回答路径
- 查看字节码文件常用工具
- 字节码文件的组成
- 应用场景:工作中一般不直接查看字节码文件,深入学习JVM的基础
字节码文件本质上是一个二进制的文件,无法直接用记事本等工具打开阅读其内容。需要通过专业的工具打开。
- 开发环境使用jclasslib插件
- 服务器环境使用javap –v命令
# 1、基本信息
魔数、字节码文件对应的Java版本号、访问标识(public final等等)、父类和接口。
类代码:
package q2class;
public class MyClass extends MyParent implements MyInterface{
private int i = 0;
@Override
public void test() {
int j = 0;
j++;
}
public static void main(String[] args) {
new MyClass();
}
}
父类代码:
package q2class;
public class MyParent {
}
接口代码:
package q2class;
public interface MyInterface {
void test();
}
编译之后用notepad++打开:
魔数前四个字节是固定的内容0xcafebabe,只有前四个字节满足这个内容才是字节码文件。
使用jclasslib查看到基本信息:
如果在服务器上,可以通过javap -v
命令打开字节码文件查看内容:
结果:
# 2、常量池
保存了字符串常量、类或接口名、字段名,主要在字节码指令中使用。
常量池是一个数组,比如这个序号为10的常量就是一个UTF8的字符串。保存了MyClass的全限定名。
# 3、字段
当前类或接口声明的字段信息
字段里保存的是名字、描述符(字段类型)、访问标识。其中名字和描述符都指向常量池中的内容。
# 4、方法
当前类或接口声明的方法信息、字节码指令。
方法中保存了方法名、描述符(参数和返回值)、访问标识。
还有字节码指令,代码编译后就变成了字节码指令:
# 5、属性
类的属性,比如源码的文件名、内部类的列表等。
上次更新: 2025/03/09, 18:29:07