JAVA的类加载器

什么是类加载器

Java类加载器( 英语:Java Classloader)是Java运行时环境(Java Runtime Environment)的一部分,负责动态加载Java类到 Java虚拟机的内存空间中。类通常是按需加载,即第一次使用该类时才加载。由于有了类加载器,Java运行时系统不需要知道文件与文件系统。

Java类加载器的作用

Java类加载器的作用就是在运行时加载类。Java 类加载器基于三个机制:委托、可见性和单一性。委托机制是指将加载-一个类的请求交给父类加载器,如果这个父类加载器不能够找到或者加载这个类,那么再加载它。可见性的原理是子类的加载器可以看见所有的父类加载器加载的类,而父类加载器看不到子类加载器加载的类。单一性原理是指仅加载一个类一次,这是由委托机制确保子类加载器不会再次加载父类加载器加载过的类。正确理解类加载器能够帮你解决NoClassDefFoundError 和java.lang.ClassNotFoundException,因为它们和类的加载相关

什么是类加载器

类加载:器是-一个用来加载类文件的类。Java源代码通过javac编译器编译成类文件。然.
后JVM来执行类文件中的字节码来执行程序。类加载器负责加载文件系统、网络或其他来
源的类文件。有三种默认使用的类加载器:Bootstrap类加载器、Extension类加载器和System
类加载器(或者叫作Application类加载器)。每种类加载器都有设定好从哪里加载类。

  1. Botstrap类加载器 -JRE/lib/rt.jar
  2. Extension类加载器 -JRE/lib/ext或者java.ext.dirs指向的目录
  3. Application类加载器 -CLASSPATH环境变量、由-classpath或者-cp选项定义,或者是JAR

委托机制

当一个类加载和初始化的时候,类仅在有需要加载的时候被加载。假设你有一个应用需.
要的类叫作Abc.class,首先加载这个类的请求由Application 类加载器委托给它的父类加载
器Extension类加载器,然后再委托给Bootstrap类加载器。Bootstrap类加载器会先看看rt.jar
中有没有这个类,因为并没有这个类,所以这个请求由回到Extension类加载器,它会查看
jre/lib/ext目录下有没有这个类,如果这个类被Extension 类加载器找到了,那么它将被加
载,而Application类加载器不会加载这个类;而如果这个类没有被Extension类加载器找到,
那么再由Application类加载器从classpath中寻找。记住classpath定义的是类文件的加载目
录,而PATH是定义的是可执行程序如javac,java等的执行路径。

可见性机制

根据可见性机制,子类加载器可以看到父类加载器加载的类,而反之则不行。

你可能感兴趣的:(JAVA的类加载器)