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才会真正的去加载相应的类

posted @ 2017-03-27 08:38  我们不该这样的  阅读(138)  评论(0)    收藏  举报