---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一、类加载器概述
1、java程序是动态加载的,即JVM只会加载程序运行时用到的类文件,这种动态的类加载机制便是由类加载器实现的。
2、java虚拟机中可以安装多个类加载器,系统默认三个主要的类加载器,每个类负责加载特定位置的类。
a、引导类加载器:负责加载系统类,它是虚拟机整体的一部分,该加载器没有对应的ClassLoader对象。如String.Class.getClassLoader()为空;
b、扩展类加载器:用于从jre/lib/ext目录加载标准的扩展,可以将jar文件放入该目录,这样即使没有classpath扩展类加载器也能够找到个各类;
c、系统类(应用类)加载器:用于加载路径中的用户定义的类。
3、类加载器也是java类,因为其他是java类的类加载器本身也要被类加载器加载,显然必须有第一个类加载器不是java类,正式BootStrap。
二、类加载器的委托机制
1、三种类加载器可认为存在一种运行商的父子关系(不是继承关系)即:ClassLoader类使用委托模型来搜索类和资源,每个ClassLoader实例都有一个相关的父类加载器,需要查找类或资源时,ClassLoader实例会在试图亲自查找类或资源之前,将搜索类或资源的任务委托给其父类加载器。
由父到子为:引导类加载器——扩展类加载器——应用类加载器
2、系统默认采用的类加载器为应用类加载器,但会首先委托给扩展类加载器,而扩展类加载器再委托给类加载器,若引导类加载器无法加载类,则由扩展类加载器加载,若还无法加载,则由应用类加载器加载。
3、类加载器之间父子关系和管辖范围图
三、自定义加载类
1、首先必须要继承ClassLoader
2、为了保证类加载器都正确实现代理模式,在开发自己的类加载器时,最好不要覆写loadClass()方法,而是覆写findClass()方法。
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
详细请查看:www.itheima.com