ClassLoad类加载器

类加载的定义

类加载器的任务是根据一个类的全限定名来读取此类的二进制字节流到JVM中,然后转换为一个与目标类对应的java.lang.Class对象实例。

对于任意一个类,都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性

Java默认提供了三个加载器

  1. BootStrap ClassLoader是Java类加载层次中最顶层的类加载器,负责加载JDK中的核心类库(java、javax、sun等开头的类)
  2. Extension ClassLoader负责加载Java的扩展类库,默认加载JAVA_HOME/jre/lib/ext/目下的所有jar。
  3. App ClassLoader加载系统类路径java -classpath-D java.class.path 指定路径下的类库,也就是我们经常用到的classpath路径,也是默认的加载器

双亲委派机制

Classload是以双亲委派的模式来搜索类的。

一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求以当前加载器基础上委托给父类的加载器去执行,如果父亲有能力解决那么就由父亲解决否则就是儿子自己解决。

简单来说就是以自身为起点向上委托到自身的结束,这样的好处就是避免重复加载 + Java核心类的优先加载,假设网络传入java.lang.Integer类,BootStrap 加载器发现该类已被加载就不会重新加载,而是直接返回原先有的Integer类。

缺点就是父类加载器加载的类不能使用子类加载器加载的类,如果要打破这个规则,可以使用反射的方式。

posted @ 2022-03-06 16:33  猫长寿  阅读(197)  评论(0)    收藏  举报