如果某个类加载器在加载类时,先不会自己去实验加载这个类,而是首将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就乐成返回;只有父类加载器无法完成此加载任务大概没有父类加载器时,才会交给自己实验加载。
如:可以看到创建 ClassLoader 须要吸取一个 ClassLoader parent 参数。这个 parent 的目标就在于实现类加载的双亲委托
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { // First, check if the class has already been loaded // 查抄class是否有被加载 Class<?> c = findLoadedClass(name); if (c == null) { try { if (parent != null) { //如果parent不为null,则调用parent的loadClass举行加载 c = parent.loadClass(name, false); } else { //parent为null,则调用BootClassLoader举行加载 c = findBootstrapClassOrNull(name); } } catch (ClassNotFoundException e) { // ClassNotFoundException thrown if class not found // from the non-null parent class loader } if (c == null) { // If still not found, then invoke findClass in order // to find the class. // 如果都找不到就自己查找 c = findClass(name); } } return c; }2、双亲作用