黑马程序员技术交流社区

标题: 类的加载,连接和初始化 [打印本页]

作者: tomson_tang    时间: 2015-2-2 11:44
标题: 类的加载,连接和初始化
当程序主动使用某个类时,如果该类还未被加载到内存中,系统会通过加载、连接、初始化三个步骤来对该类进行初始化,如果没有意外,JVM将会连续完成这三个步骤。
一.加载:
类加载指的是将类的class文件读入内存,并为之创建一个java.lang.Class对象,也就是说当程序中使用任何类时,系统都会为之建立一个java.lang.Class对象。

类的加载由类加载器完成,类加载器通常由JVM提供,JVM提供的这些类加载器通常被称为系统类加载器。除此之外,开发者可以通过继承ClassLoader基类来创建自己的类加载器。
通过使用不同的类加载器,可以从不同来源加载类的二进制数据,通常有如下几种来源:

1、从本地文件系统来加载class文件。
2、从JAR包中加载class文件,这种方式也是很常见的,JVM可以从JAR文件中直接加载该class文件。
3、通过网络加载class文件。
4、把一个Java源文件动态编译、并执行加载。

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




二.类的连接:
当类被加载之后,系统为之生成一个对应的Class对象,接着将会进入连接阶段,此时将会负责把类的二进制数据合并到JRE中。类连接又可以分为如下三个阶段:



三.类的初始化:
类的初始化阶段,主要就是对静态属性进行初始化。
Java类中对静态属性指定初始值有两种方式:声明静态属性时指定初始值和使用静态初始化块为静态属性指定初始值。
JVM初始化一个类包含如下步骤:



类初始化的时机:

**特殊情况:








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2