菜鸡每日一面系列打卡29天
每天一道面试题目
助力小伙伴轻松拿offer
坚持就是胜利,我们一起努力!
题目描述
你对Class文件了解多少?
题目分析
在之前的文章中,菜鸡曾写道,Java之所以是跨平台的语言,JVM是最大的功臣,没有之一。JVM屏蔽了底层的细节,从而使Java达到了“一次编译,到处运行”的目的。
那么,JVM到底是怎么做到的呢?要回答这个问题,绝对绕不过本文接下来要提到的Class文件。可以说,Class文件是平台无关性的基础。另外,掌握Class文件的结构,不仅有助于更加深入理解Java程序的工作原理,更能在排查问题的时候起到重要作用,这也是面试官考查该问题的重要原因。
题目解答
01
Class文件简介
Java代码经过编译之后,会生成.class文件,也就是我们常说的字节码文件。类比计算机只能识别机器码文件(0和1),JVM只能识别字节码文件。更进一步说,也就是JVM加载字节码文件,并将其解释为可供计算机执行的机器码文件。
这个神秘的Class文件的由以下几部分组成。
魔数
Class文件版本
常量池
访问标志
类索引、父类索引与接口索引集合
字段表集合
方法表集合
属性表集合
想要进一步了解这些组成部分,只需要把握第二部分的一张图。
02
Class文件详情
高能预警!下图整理了Class文件的组成部分,相关介绍,以及其关键部分的细节。
图中涉及到两个很重要的概念,无符号数和表。例如,u2代表2个字节的无符号数,u4代表4个字节的无符号数;而_info是表的代号,表是一种递归定义的结构,它是由无符号数或者其它表作为数据项的复合结构。
基于这两个概念,结合上图所示的内容,就可以对Class文件的结构有一个相当程度的把握。
以上便是菜鸡对Class文件结构的一些总结,供大家参考。
学习 | 工作 | 分享
????长按关注“有理想的菜鸡”
只有你想不到,没有你学不到