Java基础(3)------类加载器

100 阅读1分钟

简介

java虚拟机中的类加载器负责加载来自文件系统、网络或其他来源的类文件,默认使用的是双亲委派模式,有以下三种默认的类加载器:

  • Bootstrap ClassLoader:它是所有类加载器的父加载器,它没有任何父加载器,它负责加载rt.jar(是JAVA基础类库,即我们在java文档里面看到的class)
  • Extension ClassLoader:负责加载 Java 的扩展类库,也就是从jre/lib/ext目或者java.ext.dirs系统属性指定的目录下加载类.(比如 swing 系列、内置的 js 引擎、xml 解析器 等等,这些库名通常以 javax 开头,它们的 jar 包位于 JAVA_HOME/lib/ext/*.jar 中,有很多 jar 包)
  • System ClassLoader负责从classpath变量中加载类文件(由Jar中Manifest文件的classpath属性指定),它是Extension ClassLoader的子加载器。

双亲委派模式

  • 在加载类文件的时候,子加载器会先将请求委托给它的父加载器,父加载器会检测是否已经加载过此类,如果加载过此类此次加载就已经结束,如果没有的话,继续请求,直至Bootstrap ClassLoader类,如果还是没有,如果再次加载失败,就会使用子加载器架子啊,直至发起请求的子加载器位置
  • 该模式的主要特点为亮点:
  1. 子加载器可以使用父加载器已经加载的类,而父加载器无法使用子加载器加载的类
  2. 父加载器加载过的类无法被子加载器再次加载