(未完待续)
简介
class 文件是二进制格式的,它包含了被 JVM 执行的代码。由于 class 文件是由 JVM 来执行的,所以它不依赖特定硬件和操作系统。class 文件格式中定义了类与接口的表示形式,包括平台相关的一些细节(如字节序,A平台为大端序存储,B平台为小端序存储)等。
数据类型
JVM 可以操作的数据类型分为两类:原始类型(primitive type) 和 引用类型(reference type)。其中数值类型也分为两类:原始值(primitive value) 和 引用值(reference value)。
原始类型
其中,原始类型 包括:数值类型(numeric type),布尔类型 和 returnAddress类型。
- 数值类型
- 整数类型
- byte 8位有符号二进制补码整数,默认值为0
- short 16位有符号二进制补码整数,默认值为0
- int 32位有符号二进制补码整数,默认值为0
- long 64位有符号二进制补码整数,默认值为0
- char 16位无符号整数表示的 Unicode 码点,以 UTF-16 编码,默认值为 Unicode 的 null 码点(’\u0000')
- 浮点类型
- float 值为单精度浮点数集合中的元素,或是单精度扩展指数集合中的元素,默认值为正数0
- double 值为双精度浮点数集合中的元素,或是双精度扩展指数集合中的元素,默认值为正数0
- 整数类型
- 布尔类型
- true
- false 默认值
- returnAddress类型 指向某个操作码(opcode)的指针
所有 JVM 的实现都必须支持两种标准的浮点值集合:单精度浮点数集合 和 双精度浮点数集合。此外,可以选择是否支持 单精度扩展指数集合 和 双精度扩展指数集合 中的一种或全部。
NaN 和任何数值进行等值比较都会返回 false,包括与它自身比较。任何数字与 NaN 进行不等值比较都会返回 true。
Java 语言中的 boolean 类型在 JVM 中由 int 类型代替;Java 语言中的 boolean 数组类型在 JVM 中由 byte 数组类型代替。true 用1表示,false 用0表示。
引用类型
JVM 中有三种引用类型:类类型(class type),数组类型(array type) 和 接口类型(interface type)。这些类型的值分别指向动态创建的类实例,数组实例和实现了某个接口的类实例或数组实例。
数组类型最外面那一维元素的类型,称为该数组类型的组件类型(component type)。如对于 int[][][]
这种数组类型来说,其组件类型为 int[][]
。
一个数组的组件类型也可以是数组,从任意一个数组开始,若其组件类型也是数组类型,则继续取这个小数组的组件类型,直到组件类型不是数组,那么该类型就是这个数组类型的元素类型(element type)。数组的元素类型必须是原始类型、类类型或接口类型之一。
null 是引用类型的默认值,它可以转换为任意的引用类型。