每一个类都有一个对应它的类加载器。系统中的类加载器在协同工作的时候会默认使用双亲委派模型。除了启动类加载器,每个类都有其父类加载器(父子关系由组合(不是继承)来实现)。
双亲委派模型工作过程:
如果一个类加载器收到了类加载的请求,系统会首先判断当前类是否被加载过。已经被加载的类会直接返回,否则才会尝试加载。加载的时候,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,因此所有的加载请求最终都应该传送到顶层的启动类加载器(Bootstrap ClassLoader)中。只有当父加载器无法处理(它的搜索范围中没有找到所需的类)时,子下载器才会尝试自己去加载。 当父类加载器为null时,会使用启动类加载器 BootstrapClassLoader
作为父类加载器。
双亲委派好处:
- 避免同一个类被多次加载;
- 每个加载器只能加载自己范围内的类;