双亲委派过程
所谓的双亲委派,就是指优先委派上级类加载器进行加载,如果上级类加载器
- 能找到这个类,由上级加载,加载后该类也对下级加载器可见
- 找不到这个类,则下级类加载器才有资格执行加载
举个例子,例如我们现在要加载String.class,此时先从我们的应用程序类加载器开始,但是此时AC并没有权力加载,因此他先询问他的上级能否加载,也就是EC,EC此时也不能加载,也需要询问她的上级能否加载,此时BC发现在他的目录里面是可以找到的,那么就由BC进行加载,并且BC加载的类,其下面的ClassLoader都可以访问到。
如果我们此时自定义了一个类Student,那么此时还是按照上面的流程,尝试让BC去加载,但是BC发现他的目录中找不到这个类,此时权限下放,让EC去加载,EC也发现找不到这个类,那么此时权力继续下放,让AC去加载,此时AC进行加载Student类。但是AC加载的类,上面两层类加载器是访问不到的。
使用双亲委派的目的
- 让上级类加载器中的类对下机共享(反之不行),即能让你的类能依赖到JDK提供的核心类。
- 让类的加载有优先次序,保证核心类优先加载。