Class类文件中的“咖啡宝贝”

Class文件是一组以8个字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在文件之中,中间没有添加任何分隔符,整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。

字节码(Byte Code)是Java构成平台无关性的基石【Class文件格式所具备的平台中立(不依赖于特定硬件及操作系统)、紧凑、稳定和可扩展的特点,是Java技术体系实现平台无关、语言无关两项特性的重要支柱。】

Class文件和字节码文件是一回事!

什么是字节码文件呢?

字节码文件就是Java源代码经过编译器(javac)编译之后生成的新的文件,也就是一个后缀为.class的文件,此文件是一种二进制的类文件,它的内容是JVM指令,此文件就是字节码文件!

魔数与Class文件的版本

每个Class文件的头4个字节 被称为魔数(Magic Number),它的唯一作用是确定这个文件是否为一个能被虚拟机接受的Class文件 。Class文件的魔数值为0xCAFEBABE(咖啡宝贝)

紧接着魔数的4个字节存储的是Class文件的版本号:第5和第6个字节是次版本号(MinorVersion)第7和第8个字节是主版本号(Major Version)

Java的版本号是从45开始,JDK 1.1之后的每个JDK大版本发布主版本号向上加1(JDK 1.0~1.1使用了45.0~45.3的版本号),高版本的JDK能向下兼容以前版本的Class文件,但不能运行以后版本的Class文件

查看该类的class文件

java 复制代码
public class TestClass {

    private int m = 1;

    public int test() {
        return m + 1;
    }

    public static void main(String[] args) {
        TestClass testClass = new TestClass();
        System.out.println(testClass.test());
    }
}

对应字节码文件(由十六进制编辑器打开)

主版本0x0034,也就是十进制52,对应着JDK 8,该版本号说明这个是可以被JDK 8或以上版本虚拟机执行的Class文件。

Class文件版本号

相关推荐
Goldn.3 小时前
Java核心技术栈全景解析:从Web开发到AI融合
java· spring boot· 微服务· ai· jvm· maven· hibernate
李慕婉学姐4 小时前
【开题答辩过程】以《基于Android的出租车运行监测系统设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·后端·vue
m0_740043734 小时前
SpringBoot05-配置文件-热加载/日志框架slf4j/接口文档工具Swagger/Knife4j
java·spring boot·后端·log4j
编织幻境的妖4 小时前
SQL查询连续登录用户方法详解
java·数据库·sql
未若君雅裁5 小时前
JVM面试篇总结
java·jvm·面试
kk哥88995 小时前
C++ 对象 核心介绍
java·jvm·c++
招风的黑耳5 小时前
我用SpringBoot撸了一个智慧水务监控平台
java·spring boot·后端
xunyan62345 小时前
面向对象(下)-接口的理解
java·开发语言
程序员游老板5 小时前
基于SpringBoot3+vue3的爱心陪诊平台
java·spring boot·毕业设计·软件工程·课程设计·信息与通信
期待のcode5 小时前
Springboot核心构建插件
java·spring boot·后端