0
点赞
收藏
分享

微信扫一扫

java的类加载

梅梅的时光 2022-04-24 阅读 87
java

java程序是由class文件组成的一个完整的应用程序。在程序运行时,并不会一次性加载所有的class文件内如内存,二十通过java的类加载机制(ClassLoader)动态加载,从而转换成java.lang.Class类的一个实例。

ClassLoader类:
ClassLoader是一个抽象类,主要的功能是通过指定的类的名称,找到或生成对应的字节码,返回一个java.lang.Class类的实例。开发者可以继承ClassLoader类来实现自定义的类加载器。

ClassLoader类种和加载类相关的方法:
getParent(); 返回该类加载器的父类加载器
loadClass(String name);加载名称为name的类,返回的结果是java.lang.Class类的实例
findClass(String name);加载名称为name的类,返回的结果是java.lang.Class类的实例
findLoadedClass(String name);查找名称为name的已经被加载过的类,返回的结果是java.lang.Class类的实例
defineClass(String name,byte[] b,int off,int len);把字节数组b中的内容转化成java类,返回的结果是java.lang.Class类的实例,该方法被声明为final
resolveClass(Class<?> e);链接指定的java类

loadClass()方法的流程:
loadClass()方法被调用时,会首先使用findLoadedClass()方法判断该类是否已经被加载,如果未被加载,这优先使用类加载器的父类进行加载,当不存在父类加载器的时候,无法对该类进行加载时,则会调用自身的findClass()方法。因此可以重新findClass()方法来完成一些类加载的特殊要求。

自定义类加载器:
根据loadClass()方法的流程,可以发现通过重写findClass()方法,利用defineClass()方法将字节码转换成java.lang.class类对象,就可以实现自定义的类加载器,

举报

相关推荐

0 条评论