Java学习笔记 - JVM加载类纯语言描述

来源:互联网 发布:sql 约束类型 编辑:程序博客网 时间:2024/06/05 23:38

JVM加载类到内存经过三个步骤,类加载,连接,初始化,这三个步骤统称为类加载或者类初始化。

一、类加载

类加载是指将类的class文件读入内存,并为之创建一个java.lang.Class对象,也就

是说当程序使用任何类时,系统都会为之建立一个java.lang.Class对象。(所以反射的时候可以先得到Class的一个实例)。

         类的加载通过类加载器来完成,类加载器由JVM提供。通过使用不同的类加载器,可以从不同来源加载类的二进制数据:

1、  从本地文件系统来加载class文件

2、  从JAR包中加载class文件(如JDBC连接数据库)

3、  通过网络加载class文件

4、  把一个Java源文件动态编译、并执行加载

注:类加载器通常无须等到“首次”使用该类时才加载该类,Java虚拟机规范允许系统预先加载某些类。

二、类的连接

当类被加载后,系统会为之生成一个对应的Class对象,接着将会进入连接阶段,连接

阶段将会负责把类的二进制数据合并到JRE中。类连接分为下面三个阶段:

1、  验证:验证阶段用于检验被加载的类是否有正确的内部结构,并和其他类协调一致。

2、  准备:类准备阶段则负责为类的静态属性分配内存,并设置默认初始值。

3、  解析:将类的二进制数据中的符号引用转换为直接引用。

三、类的初始化

类的初始化阶段,虚拟机负责对类进行初始化,主要就是对类的静态属性进行初始化。

在Java类中对静态属性初始化有两种方式:

         1、声明静态值时指定初始值

         2、使用静态块初始化为静态属性指定的值。

         类的初始化一般包含下面几个步骤:

         1、假如这个类还没有被加载和连接,程序先加载并连接该类。

         2、假如该类的直接父类还没有被初始化,则先初始化其直接父类。

         3、假如类中有初始化语句,则系统依次执行这些初始化语句。

         注:当执行第二步的时候,系统对其父类的初始化也遵循上面步骤。所以JVM最优先初始化的总是java.lang.Object类。当程序主动使用任何一个类时,系统会保证该类以及所有父类都会被初始化。

0 0
原创粉丝点击