类加载
静态加载:
编译时加载相关的类,如果没有则报错,依赖性太强
常见于普通的new对象语句
动态加载:
运行时加载需要的类,若没有使用该类则不报错,降低了依赖性
通过反射的方法来调用对象就是动态加载,在程序不执行时,就不加载,所以降低了依赖性,只有当代码执行到该处时程序才会检查有无进行报错。
类加载时机
1.当创建对象时
2.当子类被加载时,父类也被加载
3.调用类中的静态成员时
4.通过反射
类加载流程图
加载和连接阶段是jvm来控制的
连接阶段中:验证:就是安全性验证,对字节码文件进行安全验证
准备:对静态变量进行默认初始化,并分配空间
解析:把符号引用转为直接引用
初始化:就是程序员可控制的阶段,在类中定义的代码 主要是针对静态变量的加载
加载阶段
jvm主要目的将字节码从不同的数据源转化为二进制字节流加载到内存中,即方法区中,并生成一个代表该类的对象
连接阶段 验证
目的是为了确保class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全
包括文件格式的验证&#x