• 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文件

    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());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    对应字节码文件(由十六进制编辑器打开,这里我使用Notepad++打开的,需要下载插件自行百度)

    image-20231023233940470

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

    Class文件版本号

    image-20231023234256484

  • 相关阅读:
    Android:利用sdk中的build-tools对包进行签名
    springboot项目打jar包的方法
    01字典树+dp
    node.js知识系列(2)-每天了解一点
    WPF_基于ScottPlot的实时曲线绘制
    计算机网络-后退N帧协议(弊端 滑动窗口 运行中的GBN 滑动窗口长度习题 GBN协议性能分析 )
    使用LEFT JOIN 统计左右存在的数据
    kafka latest 模式消费偏移丢数据
    视频转图像-cv2.VideoCapture()用法
    【FreeSwitch开发实践】外呼网关配置(拨打电话)
  • 原文地址:https://blog.csdn.net/qq_43417581/article/details/134025166