类加载时机
1)new 静态属性,静态方法调用
2)people.class 获取class对象
3)加载子类时需提前加载父类
4)main函数所在的类需要加载
第一大阶段(装载阶段–>类加载器)
启动类加载器 Boostrap ClassLoader jre/lib/rt.jar *jar
扩展类加载器 Ext ClassLoader jre/lib/ext/*jar
应用类加载器 Appliation ClassLoader CLASSPATH
类加载器(也是一种类,可由其他类加载器加载)
顶级父类加载器有C,C++写成,不能由其他类加载器加载
-
加载类:
双亲委派模型
- 从子类到父类依次查找之前是否加载过这个类若加载过,返回加载后产物(class对象);若当前类加载器未加载过,向父类继续查找,若无从父类到子类依次尝试加载
第二大阶段(链接阶段)
验证:符合虚拟机要求,不能危害虚拟机安全
准备:给静态变量开辟内存并类型默认值
解析:将常量池内的符号引用替换为直接引用
第三大阶段(初始化阶段)
给静态变量赋值