1.什么是双亲委派(本质就是个递归调用的流程)
a:android在加载.class文件的时候,我们都知道是通过classLoader进行加载的,但是classLoader也是有很多类型的,它会每级递归向上委托给父类加载器classLoader进行加载,如果加载过,就不再加载
(CustomClassLoader->PathClassLoader->BootClassLoader):比如我们创建了CustomClassLoader时,如果没有在它构造方法中传递父classLoader,它内部无参构造会自动加载PathClassLoader,而PathClassLoader
的构造中又会传入最顶级的ClassLoader(PathClassLoader)
b:如果父类没有加载过,就继续向上委托给父加载器进行加载,一直委托到这条线路的顶级,如果还没加载就尝试加载,如果加载失败,就逐级往回向下交还给调用者来进行加载
2.双亲委派的作用
a:防止一个.class文件被重复调用
b:对于任意一个类确保在虚拟机中的唯一性
c:保证系统类.class不会被篡改,通过委托方式可以保证系统类的加载脱机不会被篡改.
3.android中主要的类加载器
a:PathClassLoader
b:DexClassLoader
c:BaseDexClassLoader
d:BootClassLoader
4.类加载常用的两种方式
a:Class.forName()方法动态加载
b:ClassLoader.loadClass()方法动态加载
5.类加载的步骤
装载(load) -> 链接->初始化