随笔
2019-05-08 本文已影响0人
层林尽染lr
类加载简单说就是将编写的类加载到jvm中,主要分为五个过程:
1.加载
将.class文件以二进制的方式加载到内存中,并且声称一个class对象,提供访问类数据的接口。
2.验证
就是判断类的二进制流是不是符合虚拟机的格式。
3.准备
给类变量设置初始值,并且分配内存。
4.解析
将常量池中的符号引用变成直接引用。
5.初始化
给静态变量赋值,执行静态代码块。
双亲委派机制:
类加载有双亲加载,简单说就是每单需要加载类时,子加载器都会让父类先加载,最终由最高层级的启动类加载器来加载,当父加载器找不到类时,才会抛给子类,这个是防止出现加载混乱,因为当自己编写一个跟系统一样的类的时候,父类默认会用系统的,而不至于出现不知道加载那一个的情况。
当然,这种模式也可以打破,要打破这种模式,需要自定义类加载器,并重写findclass和loadclass方法,这里最重要的是findclass方法,因为默认都是交个父类执行,这里重写成由当前类来找。关于为什么要打破这种机制,是因为默认走父类的逻辑,但是有些类是要用三方厂商,此时就需要打破这种机制。