加载器
类加载器定义:
将class文件加载到内存中
类加载器分类:
启动类加载器:
扩展类加载器:
应用类加载器:
自定义类加载器:
为什么设置那么多类加载器?
防止开发者定义的类和底层的类冲突,通过不同的加载器加载不同的文件目录,遵循双亲委派原则,使加载到内存中的类唯一。
类加载器加载遵循的原则是什么?
双亲委派机制
什么是双亲委派机制?
类加载的过程中,自下而上依次查找,自上而下依次加载,若被加载过,就不会再次加载,保证类在内存中的唯一。
类加载器原理:
ClassLoader.getSystemClassLoader().loadClass(“Student”);
通过ClassLoader.getSystemClassLoader().loadClass:调用ClassLoader的loadClass方法,
1.在loadClass方法中,当前类加载器是应用加载器,调用findLoadedClass方法加载类,若类为null,则未加载到。
通过当前类加载器的父类,再次调用loadClass方法
2.在loadClass方法中,当前类加载器是扩展类加载器,调用findLoadedClass方法加载类,若类为null,则未加载到。
通过当前类加载器的父类-启动加载器的findBootstrapClassOrNull方法查找(之前是自下而上查找,之后是自上而下加载),若未找到
- 通过urlClassLoader 的findClass查找-此时是接2,当前类加载器是扩展加载器,如果未查询到,则退出2中的递归,在调用findClass查找-此时是接1,当前加载器是应用类加载器,若查询到则放到内存中。-3操作时自上而下查找。