类加载机制
加载
class文件通过类加载器加载到内存,形成方法区的运行时数据结构,在堆里面生成代表这个类的class对象。
链接 静态数据变成可运行状态
验证
准备:为类变量赋初值,0
解析:符号引用替换为直接引用
初始化
执行类构造器clinit方法 (类变量和静态语句块合并)
类加载器:
1-bootstrap class loader引导类加载器(没有父类加载器)
加载Java的核心库
2-extensions class loader扩展类加载器(父类加载器为null)
3-application class loader 应用程序类加载器
2 3 继承classloader类
3继承2
类加载器的代理模式
代理模式之双亲委托机制
优点:保证核心库的安全 核心类自己定义不了,会一层层向上加载,如果不能加载,再向下传递。
类加载器加载Class大致要经过如下8个步骤:
检测此Class是否载入过,即在缓冲区中是否有此Class,如果有直接进入第8步,否则进入第2步。
如果没有父类加载器,则要么Parent是根类加载器,要么本身就是根类加载器,则跳到第4步,如果父类加载器存在,则进入第3步。
请求使用父类加载器去载入目标类,如果载入成功则跳至第8步,否则接着执行第5步。
请求使用根类加载器去载入目标类,如果载入成功则跳至第8步,否则跳至第7步。
当前类加载器尝试寻找Class文件,如果找到则执行第6步,如果找不到则执行第7步。
从文件中载入Class,成功后跳至第8步。
抛出ClassNotFountException异常。
返回对应的java.lang.Class对象。