黑马程序员-Java高新技术_类加载器视频学习笔记
java类被加载器加载,加载器也是一个java类,叫类加载器。java中有三个类加载器,成父子关系,而且如果我们要定义一个自己的类加载器必须指定一个父加载器。类加载器之间的父子关系和管辖范围图:
知识点1:类加载器的委托机制
当java虚拟机加载类时,到底用哪个类加载器?
◇首先当前线程的类加载器去加载线程中的第一个类
◇如果类A引用了类B,那么java虚拟机将使用加载类A的类加载器去加载类B
◇还可以直接调用ClassLoader.loaderClass()方法来指定某个类加载器去加载
◇首先当前线程的类加载器去加载线程中的第一个类
◇如果类A引用了类B,那么java虚拟机将使用加载类A的类加载器去加载类B
◇还可以直接调用ClassLoader.loaderClass()方法来指定某个类加载器去加载
每个类加载器加载时,又委托给其上级的类加载器。
当所有祖宗类加载器没有加载到该类,则回到发起者类加载器,还加载不到,则抛出ClassNoFoundException,不是再找发起者类加载器和儿子,因为没有getChild方法。——从上到下的加载。
当所有祖宗类加载器没有加载到该类,则回到发起者类加载器,还加载不到,则抛出ClassNoFoundException,不是再找发起者类加载器和儿子,因为没有getChild方法。——从上到下的加载。
知识点2:自定义类加载器
工作机制
父类——>loadClass/findClass()/得到class文件的内容转换成字节码—>difineClass()/将一个 byte 数组转换为 Class 类的实例
父类——>loadClass/findClass()/得到class文件的内容转换成字节码—>difineClass()/将一个 byte 数组转换为 Class 类的实例
实现步骤
◇自定义的类加载器必须继承ClassLoader
◇覆盖findClass方法
◇覆盖difineClass()方法
◇自定义的类加载器必须继承ClassLoader
◇覆盖findClass方法
◇覆盖difineClass()方法
查看视频及源文件 MyClassLoader.class