分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
Java中的类加载器,有启动类加载器(Bootstrap Classloader)、扩展类加载器(Launcher$ExtClassLoader)、应用程序类加载器(Launcher$AppClassLoader),用户还可以实现自定义的类加载器,见下图:
类加载的这种关系称为双亲委派模式,需要注意的是他们之间不是继承关系,而是组合关系,在执行类加载的动作时,首先都是交给父类去加载,如果父类无法加载再交给子类去完成,直到调用用户自定义的类加载器去加载,如果全部都无法加载,就会抛出ClassNotFoundException。
Launcher$ExtClassLoader和Launcher$AppClassLoader都是URLClassLoader的子类,但是他们的实现又是有一点不同的,Launcher$ExtClassLoader的实现是遵循的双亲委派模型,它重写的是findClass方法,如下:
protected Class findClass(String paramString) throws ClassNotFoundException { DownloadManager.getBootClassPathEntryForClass(paramString); return super.findClass(paramString);}
而 Launcher$AppClassLoader 的实现是没有遵循双亲委派模型的,它重的是 loadClass 方法,以下是 AppClassLoader 中的 loadClass 的源码:
public synchronized Class loadClass(String paramString, boolean paramBoolean) throws ClassNotFoundException { DownloadManager.getBootClassPathEntryForClass(paramString); int