每日一面——你对Class文件了解多少?

菜鸡每日一面系列打卡29

每天一道面试题目 

助力小伙伴轻松拿offer

坚持就是胜利,我们一起努力!

题目描述

你对Class文件了解多少?

题目分析

在之前的文章中,菜鸡曾写道,Java之所以是跨平台的语言,JVM是最大的功臣,没有之一。JVM屏蔽了底层的细节,从而使Java达到了“一次编译,到处运行”的目的。

那么,JVM到底是怎么做到的呢?要回答这个问题,绝对绕不过本文接下来要提到的Class文件。可以说,Class文件是平台无关性的基础。另外,掌握Class文件的结构,不仅有助于更加深入理解Java程序的工作原理,更能在排查问题的时候起到重要作用,这也是面试官考查该问题的重要原因。

题目解答

01

Class文件简介

Java代码经过编译之后,会生成.class文件,也就是我们常说的字节码文件。类比计算机只能识别机器码文件(01),JVM只能识别字节码文件。更进一步说,也就是JVM加载字节码文件,并将其解释为可供计算机执行的机器码文件。

这个神秘的Class文件的由以下几部分组成。

  • 魔数

  • Class文件版本

  • 常量池

  • 访问标志

  • 类索引、父类索引与接口索引集合

  • 字段表集合

  • 方法表集合

  • 属性表集合

想要进一步了解这些组成部分,只需要把握第二部分的一张图。

02

Class文件详情

高能预警!下图整理了Class文件的组成部分,相关介绍,以及其关键部分的细节。

每日一面——你对Class文件了解多少?

图中涉及到两个很重要的概念,无符号数和表。例如,u2代表2个字节的无符号数,u4代表4个字节的无符号数;而_info是表的代号,表是一种递归定义的结构,它是由无符号数或者其它表作为数据项的复合结构。

基于这两个概念,结合上图所示的内容,就可以对Class文件的结构有一个相当程度的把握。

以上便是菜鸡对Class文件结构的一些总结,供大家参考。

每日一面——你对Class文件了解多少?

学习 | 工作 | 分享

每日一面——你对Class文件了解多少?

????长按关注“有理想的菜鸡

只有你想不到,没有你学不到