ClassLoader是什么?
Class代表它的作用对象是类,Loader代表它的功能是加载,那么ClassLoader就是把一个以.class结尾的文件以JVM能识别的存储形式加载到内存中。
类加载过程
一个类在被使用之前,会经历class文件生成—>加载—>连接—>初始化等阶段。这些阶段组合起来为完整的类加载过程,其中加载阶段主要完成三件事:
通过类的全限定名来获取定义次类的二进制字节流
将该二进制字节流定义的静态数据结构转换成方法区的运行时数据结构
在内存中生成一个代表该类的Class对象,供外部通过该对象来获取类的元数据信息
上述类加载的大部分阶段是由JVM控制的,但JVM对于加载阶段有些没有做强制限制,比如从哪获取class文件,以及如何加载class都可以由用户自定义实现方案,正是由于JVM提供的这些入口,衍生出了动态字节码,applet, OSGI,类隔离(ali-Pandora)等技术。
正常情况下一个ClassLoader需要两个必要属性
1、parent:用于指明当前ClassLoader的父类加载器
2、url:类命名空间,用于指明当前ClassLoader从哪里加载class文件
ClassLoader分类:
1、系统自带的ClassLoader
2、用户自定