第03讲:字节码层面分析 class 类文件结构

发布时间:2022-11-13 18:00

java中 String 字符串的长度有限制吗?

平时项目开发中,我们经常会用到 String 来声明字符串,比如 String str = “abc”, 但是你可能从来没有想过等于号之后的字符串常量到底有没有长度限制。要彻底答对这道题,就需要先学会今天所讲的内容——class 文件。

class 的来龙去脉

Java 能够实现"一次编译,到处运行”,这其中 class 文件要占大部分功劳。为了让 Java 语言具有良好的跨平台能力,Java 独具匠心的提供了一种可以在所有平台上都能使用的一种中间代码——字节码类文件(.class文件)。有了字节码,无论是哪种平台(如:Mac、Windows、Linux 等),只要安装了虚拟机都可以直接运行字节码。

并且,有了字节码,也解除了 Java 虚拟机和 Java 语言之间的耦合。这句话你可能不是很理解,这种解耦指的是什么?

其实,Java 虚拟机当初被设计出来的目的就不单单是只运行 Java 这一种语言。目前 Java 虚拟机已经可以支持很多除 Java 语言以外的其他语言了,如 Groovy、JRuby、Jython、Scala 等。之所以可以支持其他语言,是因为这些语言经过编译之后也可以生成能够被 JVM 解析并执行的字节码文件。而虚拟机并不关心字节码是由哪种语言编译而来的。如下图所示:
第03讲:字节码层面分析 class 类文件结构_第1张图片

上帝视角看 class 文件

如果从纵观的角度来看 class 文件,class 文件里只有两种数据结构:无符号数和表。

  • 无符号数:属于基本的数据类型,以 u1、u2、u4、u8 来分别代表 1 个字节、2 个字节、4 个字节和 8 个字节的无符号数,无符号数可以用来描述数字、索引引用、数量值或者字符串(UTF-8 编码)。

  • :表是由多个无符号数或者其他表作为数据项构成的复合数据类型,class文件中所有的表都以“_info”结尾。其实,整个 Class 文件本质上就是一张表。

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号