classLoader类加载机制
ClassLoader类加载机制
在程序运行时,并不会一次性加载所有的class文件进入内存,而是通过java的类加载机制(ClassLoader)进行动态加载,从而转化成java.lang.Class类的一个实例。
ClassLoader类
通过指定的类的名称,找到或生成对应的字节码,返回一个java.lang.Class的实例。开发者可以通过继承ClassLoader类来实现自定义的类加载器。
ClassLoader类中和加载类相关的方法
1.getparent():返回该类加载器的父类加载器
2.loadClass(String name):加载名称为name的类,返回的结果是java.lang.Class类的实例
3.findClass(String name):查找名称为name的类,返回的结果是java.lang.Class类的实例
4.findLoadedClass(String name):查找名称为name的已经被加载过的类,返回的结果是java.lang.Class类的实例
5.defineClass(String name, bytep[] b,int off,int len):把字节数组b中的内容转换成java类,返回的结果是java.lang.Class类的实例,该方法被声明为final
6.resolveClass(Class<?> c) :链接指定的java类
流程
1.当loadClass方法被调用时,会首先使用findLoadedClass()方法判断该类是否已经被加载。
2.若未被加载,则优先使用加载器的父类加载器进行加载
3.若不存在父类加载器,无法对该类进行加载时,就调用自身的findClass()方法。
因此可以重写findClass()来完成一些类加载的特殊要求。
URLClassLoader类
可以从远程服务器上加载类的能力
java动态代理
动态代理实质是反射
classLoader类加载机制