目录
CONTENTS
前言
类的加载
类的初始化
Java反射
(一)前言
每个开发人员对Java.lang.ClassNotFoundExcetpion这个异常肯定都
不陌生,这背后就涉及到了java技术体系中的类加载。
Java的类加载机制是技术体系中比较核心的部分,虽然和大部分开发
人员直接打交道不多,但是对其背后的机理有一定理解有助于排查程
序中出现的类加载失败等技术问题。
对理解java虚拟机的连接模型和java语言的动态性都有很大帮助。
(二)类的加载
类加载指将类的class文件读入内存,并为之创建一个
java.lang.Class对象。
类也是一种对象。
类的加载由类加载器完成
加载类的来源:
本地文件系统加载class文件
从jar包加载class文件
通过网络加载class文件
把一个JAVA源文件动态编译,并执行加载类
(二)类的加载
Ø 加载
Ø 连接
Ø 初始化
(二)类的连接
连接负责把类的二进制数据合并到JRE中,分为下面三个阶段:
Ø 验证:检验被加载的类是否有正确的内部结构,并和其他类协调一致
Ø 准备:为类的类变量分配内存,并设置默认初始值
Ø 解析:将类的二进制数据中的符号引用替换为直接引用。
(三)类的初始化
JAVA虚拟机负责对类进行初始化,主要是对类变量进行初始化
Ø 声明类变量时指定初始值,
Ø 使用静态初始化块
(三)类的初始化步骤
Ø 1. 如果类没有被加载和连接,先加载并连接类
Ø 2. 如果父类没有被初始化,先初始化其直接父类
Ø 3. 类中有初始化语句,则系统依次执行初始化语句
如果2中父类还有直接父类,则重复执行这三个步骤。。。
所以,JVM最先初始化的类是 java.lang.Object 类