回答
在Android(Dalvik)系统类加载器中是PathClassLoader。
你将不得不看看它的源代码来找出算法。这可能是遍历可用Jar文件和目录的某种形式的树遍历。
你在Java类加载器的层次结构,例如:
Bootstrap CL
|
|
Extension CL
|
|
SystemClassLoader CL
|
|
Application Specific CL
当调用一个CL的的findClass()方法一个ClassLoader通常委托给它的父首先将尝试加载类。
E.g.如果你想加载类,这是在EXT-文件夹JVM的你可以使用
Class clazz=ClassLoader.getSystemClassLoader().findClass("org.pack.ExtClass");
首先会委托给它的父,扩展类加载器,这将委托给它的父, Bootstrap CL。 Bootstrap CL将返回null给扩展类加载器,因为它找不到该类,那么扩展CL将自己寻找类。由于它会在类路径中找到类“org.pack.ExtClass”,它将加载,准备并将类返回给SystemClassLoader,SystemClassLoader会将参考clazz
设置为返回的类对象。
因此,作为一般规则,ClassLoader将总是首先委托给它的父代,并尝试自行寻找它的类。
但是这个规则有例外,最突出的是Tomcat等人的WebApp Classloaders。 WebAppClassLoader的行为有点不同。我认为Tomcat Directory中有一个bootstrap.jar,它将首先加载类,如果找不到所请求的类,则只会委托给它的父类。
几个环节:
http://www.developer.com/java/other/article.php/2248831/Java-Class-Loading-The-Basics.htm
http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html
http://www.ibm.com/developerworks/java/library/j-dyn0429/
希望帮助..
- 1. 良好的资源加载系统
- 2. 类加载器如何找到资源?
- 3. 寻找资源管理/分配系统
- 4. 的Java类加载器没有找到预期的资源
- 5. JNLP不下载操作系统资源
- 6. 更改Weblogic的系统类加载器
- 7. 系统类加载器的名称
- 8. 无法加载资源工厂类java.lang.ClassNotFoundException:com.jolbox.bonecp.BoneCPDataSource
- 9. 使用类加载器或文件找到资源?
- 10. 系统资源监视器/图表
- 11. 源代码管理系统的算法?
- 12. 从html5文件系统API加载资源
- 13. 无法加载资源:服务器与404未找到
- 14. 找到无资源插槽的算法
- 15. Chrome无法加载资源
- 16. Froogaloop无法加载资源
- 17. Laravel“无法加载资源”
- 18. 无法加载资源?
- 19. PHP:无法加载资源
- 20. WebappClassLoader无法加载资源
- 21. Laravel无法加载资源
- 22. PowerApps: - 无法加载资源
- 23. 工作流系统资源
- 24. System.Data.OleDb.OleDbException:超出系统资源
- 25. WiX:MSI通过系统面板卸载查找安装源
- 26. 在Android源代码中,系统查找并下载OTA更新?
- 27. 静态资源的JSF加载资源
- 28. 检查没有加载的资源
- 29. 替换系统类加载器用于包含Jars的Jars类
- 30. Webview资源侦听器不捕获加载的资源