黑马程序员-----类加载器

来源:互联网 发布:c 高级编程第7版 pdf 编辑:程序博客网 时间:2024/04/30 03:05

------- android培训、java培训、期待与您交流! ----------

类加载器

 

简要介绍什么是类加载器和类加载器的作用

 

java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类加载器负责加载特定位置的类

 BootStrap      ----->   JRE/lib/rt.jar
     |
 ExtClassLoader------> JRE/lib/ext/*.jar
     |
 AppClassLoader------> classpath指定的所有jar或目录

类加载器也是java类,因为其他是java类的类加载器本身也要被类加载器加载
显然必须有第一个类加载器不是java类,这正是BootStrap(嵌套在java虚拟机内的,用c++语言编写的类加载器)

java虚拟机中的所有类加载器采用具有父子关系的树形结构进行组织
在实例化每个类加载器对象时,需要为其指定一个父级类加载器对象
或者默认采用系统类加载器为其父级类加载器


类加载器的委托机制

 

当java虚拟机要加载一个类时,到底派出哪个类加载器去加载呢?


 首先当前线程的类加载器去加载线程中的第一个类
 如果类A中引用了类B,java虚拟机将使用加载类A的加载器去加载类B
 还可以直接调用 类加载器对象.loadClass()方法来指定某个类加载器去加载某个类

每个类加载器加载类时,又先委托给其上机类加载器
 当所以祖宗类加载器没有加载到类,回到发起者类加载器,还加载不了
 则抛出ClassNotFoundException,不是再去找发起者类加载器的儿子
 因为没有getChild方法,即使有,那么多儿子,也不懂找哪一个


面试题,能不能自己写个类叫java.lang.System


答: 可以,但没有意义
 因为类加载采用委托机制,这样可以保证爸爸们优先
 也就是总是使用爸爸们能找到的类,这样总是使用java系统提供的System,而不会用到我们自己写的

原创粉丝点击