Java 的编译器将 Java 代码编译为 Java 字节码,这些字节码是 Java 虚拟机(JVM)可执行的指令。Java 字节码是一种中间语言,与特定操作系统或硬件平台无关。因此,Java 字节码可以在任何支持 Java 虚拟机的平台上运行。
Java 字节码是一种二进制格式,它使用十六进制表示法进行显示。Java 类文件的前几个字节(即魔数)是固定的,它们标识该文件是 Java 类文件。例如,Java 类文件的魔数是 "CA FE BA BE",它的十六进制表示为 0xCA, 0xFE, 0xBA, 0xBE
。
除了魔数外,Java 类文件的其余部分也以二进制形式编码。Java 字节码指令由一个操作码和零个或多个操作数组成,每个操作数都有一个特定的格式。Java 编译器将 Java 代码编译为 Java 字节码时,将操作码和操作数按照一定的规则编码为二进制格式。
为什么 Java 字节码不是简单的 0 和 1 呢?这是因为 Java 字节码使用的十六进制编码更加紧凑和易于读取。另外,Java 字节码使用的操作码和操作数格式不是固定大小的,不同的操作码和操作数可能需要不同的字节数进行编码。因此,使用固定长度的二进制编码可能会浪费空间或限制操作码和操作数的长度。