java 类加载机制

来源:互联网 发布:java编程框架 编辑:程序博客网 时间:2024/06/06 09:07

1.java虚拟机中可以有多个类加载器。

2.系统默认有三个类加载器,每个类加载器负责特定的位置的类加载任务,分别是:

BootStrap-->JRE/lib/rt.jar

ExtClassLoader-->JRE/lib/ext/*.jar

AppClassLoader-->CLASSPATH指定的所有的jar或者目录

3.类加载器也是java类,显然肯定有一个类加载器,不是java类,这个类加载器正是:BootStrap(运行在虚拟机内核中,是用C++编写的)

 System.out.println("System类的类加载器是:"+System.class.getClassLoader());
输出的结果为:


因为System的加载器是BootStrap是由c++写的,所以打印出来的是NULL

4.java虚拟机中,所有的类加载器都采用的父子关系的树形结构进行组织的,在实例化类加载器的时候,需要为其制定父类加载器或采用系统默认的类加载器作为父加载器。

5.类加载器,进行类加载的时候,会遵守委托机制:每个类加载器加载时,会先委托给父加载器,当父加载器未加载成功的时候,子加载器才会加载呢。当所有的祖宗加载器都没有加载到该类的时候,回到发起者类加载器,如果还是加载不成功,则会抛出异常:ClassNotFoundException.

6.自定义自己的类加载器的时候,需要继承ClassLoader这个类,然后重载findClass方法,在这里要关注这三个方法:loadClass()、findClass()、defineClass();

loadClass()这个方法进行加载的时候,会默认使用委托机制。

findClass方法会直接使用发起的类加载器进行加载。

defineClass 将类的字节数组转化成某个类

0 0