Java最重要的一个机制就是虚拟机JVM,通过执行编译好的字节码.class文件,可以实现跨平台的可移植性,那么小伙伴们会不会好奇字节码文件是怎样的,它是怎么工作的?参考来源,为了便于回顾,特此按自己思路重头来一遍,接下来我们就一起来解读一下字节码文件,前方高能,大脑请提前清空。
1. 前期准备
1.1 首先编写一个测试程序,简单地在main方法中声明一个Integer包装类型变量i和一个基本类型int类型变量n,代码如下。
public class EnTest {
public static void main(String[] args) {
Integer i = 10;
int n = i;
}
}
1.2 命令行javac编译得到.class字节码文件
1.3 安装二进制文件编辑器,博主使用Notepad++,可参照我的另一篇博客,你也可以使用其它编辑器。
2. 打开字节码文件
2.1 使用安装HexEditor插件的Notepad++打开字节码文件,需要说明的是,文件中都是16进制,所以两位刚好是一个字节,如下图。
2.2 按照对照表分析字节码文件
2.2.1 从文件取4个字节【ca fe ba be】得到第一块内容,文件类型
最先的4个字节ca fe ba be代表了字节码文件的类型,只要是class文件,开头的四个字节就是cafebabe,音译咖啡宝贝也就是java的logo热腾腾的咖啡。
2.2.2接着从文件取2+2个字节【00 00 00 3b】 得到第二块内容,java版本
其中开始的【00 00】这两个字节的十进制是0,代表,次版本号是0,;然后【00 3b】的十进制是59,代表主版本号是15,所以我的java版本是java 15
2.2.3接着取2+n个字节得到第三块内容——常量池
先取两个字节00 19,化为十进制为25,表示有25项