类加载器和双亲委派机制

类加载器

  1. 什么是类加载器
    类加载器加载的是.clss文件,至于能否运行不由类加载器负责。相当于连接了.class和jvm。

  2. 类加载器的分类

  • 启动类加载器(bootstraap):负责加载jre中最基础,最重要的类,例如java.lang.String。还有虚拟机参数 -Xbootclasspath 指定的类。由于它由由C++代码实现,没有对应的java对象,因此在java中,尝试获取此类时,只能使用null来指代。
  • 扩展类加载器 (Extension):由Java代码实现,用于加载相对次要、但又通用的类,比如存放在 JRE 的 lib/ext 目录下 jar 包中的类,
  • 应用程序类加载器(AppClassLoader):加载自己写的java程序
  • 除了BootStrap ,其他的类都是ClassLoader的子类。

双亲委派机制

其实就是一个类加载器接收到加载请求时,它会先将请求转发给父类加载器。在父类加载器没有找到所请求的类的情况下,该类加载器才会去加载。这样的好处一就是:可以避免类的重复加载,当父亲已经加载了该类时,就没有必要子ClassLoader再加载一次。二是更加安全,比如jt包下的java.lang.String类如果被重写,由于父类加载了,字类不会再加载,调用时依旧是调用的父类加载的原来的String.

你可能感兴趣的:(类加载器和双亲委派机制)