大家好,欢迎来到IT知识分享网。
文章整体目录
前言
我们研究.class文件可以对JVM的类加载过程有一个更加清晰的认识。下面我就带大家看看一个.class文件到底是长什么样的。
然后我们通过一个简单的代码示例来演示我们接下来的内容:
public class Test {
private int a = 10; public void method(String a) {
} }
1、魔数
- 每个Class文件的头4个字节称为魔数(Magic Number)
- 唯一作用是用于确定这个文件是否为一个能被虚拟机接受的Class文件。
- Class文件魔数的值为0xCAFEBABE。如果一个文件不是以0xCAFEBABE开头,那它就肯定不是Java class文件。
2、版本号
在魔数后面的四个字节存储的是class文件的版本号。5、6字节是次版本号(Minor Version);7、8两个字节是主版本号(Major Version)。版本号的对照表如下:
主版本号与次版本号在.class文件中的表示如下:
可以看到主版本号值为0x0034,对应十进制为52。次版本号为0,因此对应JDK版本就是1.8。
3、常量池
3.1、常量池大小
3.2、常量池内容
4、类的访问控制权限
5、类名
6、接口
6.1、实现的接口个数
6.2、接口内容
一旦接口的个数为0,那么接口内容就会为空。
7、属性
7.1、属性的数量
7.2、属性的值
8、成员方法
8.1、成员方法数量
8.2、成员方法的值
9、额外属性
9.1、额外属性的数量
9.1、额外属性的值
到此一个简单的class文件就解析完毕了。其实可以发现,class文件就是按照一定的规则进行生成的,因此解析class文件也就按照这样的规则进行解析就好了。我们去了解class文件的就可以更加清晰地了解到类加载机制中类加载器是如何将一个class文件加载入内存中,同时也可以让我们对于class文件不再那么陌生
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/118850.html



