主要内容包括:
1.类加载 / 类连接 / 类初始化
2.类加载器
JVM进程
类的加载
将类的class文件 (类的二进制数据)读入内存,并为之创建一个java.lang.Class对象。
类加载由类加载器 完成,JVM会提供类加载器(系统类加载器),开发者也可以自定义。
通过使用不同类加载器,可以从以下来源加载类的class文件:
1.本地文件系统
2.JAR包
3.通过网络
4.把java源文件动态编译 ,加载
类的连接
负责把加载到内存中的类的二进制数据合并到JRE中,类的连接又可分为三个阶段:
1.验证
2.准备:为类的静态属性分配内存,并设置默认初始值。
3.解析
类的初始化
类的初始化主要对静态属性进行初始化 。有两种方式:
1.声明时初始化
2.静态初始化块(static{ })中初始化
注1:在类连接阶段已经为静态属性分配好了内存,并使用默认值初始化了。在类初始化阶段是利用上面两种方式使用指定值初始化。
注2:对于上面两种初始化方式,JVM会按这些语句在程序中的排列顺序依次执行。
注3:静态初始化块与类相关,会在类初始化时被执行。通常用于对类的静态属性执行初始化操作。
JVM初始化一个类的步骤:
1.假如这个类还没有被加载和连接,程序先加载并连接该类
2.假如该类的直接父类还没有被初始化,则先初始化其直接父类(如果直接父类也没有初始化呢?)
3.假如类中有初始化语句,则系统依次执行这些初始化语句。
注:初始化一个类不仅仅是针对该类初始化,还包括该类的直接父类和间接父类,一直上溯到java.lang.Object.
初始化时,先初始化顶层父类,依次向下。
类初始化时机
类加载器
一个类被载入JVM中,同一个类就不会被再次载入。何为“同一个类”?
一个载入JVM的类都有一个唯一的标识:类全名+其类加载器。