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动态代理

动态代理实质是反射

Author

vague huang

Posted on

2022-02-24

Updated on

2022-02-24

Licensed under

Comments