类的加载过程分为三个步骤:
- 装载:(这个过程使用类加载器完成的)
a)类加载器通过一个类的全限定名找到该java编译后的class文件,并转化为字节流。
b)这些字节流中会有描述该类的静态存储结构的信息,根据这些信息在方法区转换为对应的运行时数据结构。
b)在java堆里创建一个代表该类的java.lang.Class对象,用于作为访问这些运行时数据的入口。 - 链接:
a)验证:保证所加载的类的正确性,包括文件格式验证、元数据验证、字节码验证、符号引用验证等。
b)准备:为静态变量分配内存,并对其初始化默认值。比如下面代码会把a初始化为0,什么类型的变量默认值是多少请百度。
private static int a = 4;
c)解析:把类中的符号引用转换为直接引用,符号引用是描绘该类的信息,JVM并不能直接使用,需要转换为直接引用方可使用。
3. 初始化:执行该类的静态成员赋值和执行该类的静态代码块。
private static int a = 4; //初始化会对静态变量a赋值4.
static{
//TODO //初始化也会执行该静态代码块。
}
至此,一个类就顺利加载了。