类型的的装载、连接、初始化
?
?一、Java虚拟机通过装载、连接和初始化一个Java类型(java类或java口),
?????? 使得该类型可以被正在运行的java程序所使用。有以下几个步骤:
?
???????? --> 装载:就是将java类型的二进制形式的文件读入到虚拟机之中,装载
??????????????????????? 由三个基本步骤组成:
?
????????????????????? --> 通过该类型的全限定名,产生一个代表该类型的二进制数据
??????????????????????????? 流。
????????????????????? --> 解析这个二进制数据流为方法区内的内部数据结构。
?
????????????????????? --> 创建一个代表该类型的java.lang.Class类的实例。
?
?????????--> 连接:就是把这种已经装载到虚拟机中的二进制的类型数据合并的虚拟
??????????????????????? 机的运行时状态中去,而连接又分为三个步骤。
?
????????????????????? --> 验证:确保被加载的类型数据的真确性并适合虚拟机的使用
?
????????????????????? --> 准备:为类型的静态变量分配内存,并将其初始化为默认值
?
????????????????????? --> 解析:将类型中的符号应用转化为直接应用
?
?????????--> 初始化:为类型的静态变量赋真确的初始值
?
??????? 整个类型的装载、连接、初始化的过程如图1-1所示:????????
???????????????????????????????????????
????????????????????????????
??????????????????????????????????????? 图1-1 类型的装载、连接、初始化
?
二、.class文件的来源
?
????????Java 虚拟机并没有明确的规定Java类型的二进制文件应该怎样产生,以下
????????是几种可能的产生方式:
?
??????????? --> 从本地系统中装载一个Java class文件
?
??????????? --> 通过网络下载一个Java class文件
?
????????????--> 从一个JAR、ZIP、CAB或者是其他某种归档文件中提取Java class
????????????????? 文件
?
????????????--> 从一个专有的数据库中提取Java class文件
?
??????????? --> 将一个Java 源文件动态编译为Java class文件
?
三、类装载器装载的最终产品
?
????? 类装载器装载的最终产品是位于堆内存中的Class类的实例化对象,它成为
??????Java程序和内部数据结构之间的接口。要想访问关于该类型的信息(它们是
??????被存储在内部数据结构中的),程序就要调用该类型对应的Class类的实例化
????? 对象中的方法。这个过程就是把一个Java类型的二进制形式的数据解析为方
????? 法区中的内部数据结构,并在堆中建立一个Class对象的过程。
?
????? 这个过程如下图3-1所示:
????????????????????????????????????????????????????????????????????? 图3-1?
???????????????
?