javase——类的加载,连接,初始化
类的加载,连接,初始化统称为类的加载或类初始化
类加载指的是将类的class文件读入内存,并为之创建一个java.lang.Class对象,
也就是说,当程序员使用任何类时,系统都会为之创建一个java.lang.Class对象
类是对象的抽象,那么类是不是也是对象呢,答案当然是,类是java.lang.Class类的对象
连接
当类被加载之后,系统会位置生成一个对应的Class对象,接着将会进入连接阶段,连接阶段负责把类的二进制数据合并到JRE中,类连接又可以分为如下三个阶段 (1)验证:用于检验被加载的类是否有正确的内部结构,并和其他类协调一致。 (2)准备:负责为类的类变量分配内存,并设置默认初始化值。 (3)将类的二进制数据中的符号引用替换成直接引用
初始化
类的初始化主要是对类变量进行初始化,在java类中队类变量指定初始化值得方式有两种
(1)声明类变量是指定初始化值;
(2)使用静态初始化块为类变量指定初始化值 JVM初始化一个类包含如下几个步骤。 (1)假如这个类还没有被加载和连接,则程序会先加载并连接该类。 (2)假如该类的直接父类还没有被初始化,则先初始化其直接父类 (3)假如类中有初始化语句,则系统依次执行这个初始化语句 当执行到第二步是,系统对他的父类也是遵循步骤1~3;如果该父类又有直接父类,那么还是步骤1~3,最后最先初始化的总是java.lang.Object类
编译的时候和运行的时候加载类是不同的两个概念。
你重点需要关注的时候是运行的时候在什么情况下会触发类的加载
java需要加载一个class的时候只有在下面集中情况下才会发生:
1 创建一个java实例
2 调用一个类的静态方法
3 静态域赋值
4 访问静态域
5 在顶层类中执行assert语句
当上面的某个条件发生的时候,ClassLoader才会真正的去加载相应的类

浙公网安备 33010602011771号