类加载机制:类加载器
类加载器(ClassLoader):
当编译器编译java源文件之后,会产生一个相应的字节码(.class文件)。当程序开始运行之前,必须将这个文件载入内存中,生成
一个与之匹配达到class对象。这个过程我们称之为类加载,要弄清楚加载的机制,首先我们必须要清楚了解类加载的相关知识,它石完成整个类加载的重要工具。
简单的说,当一个class文件载入内存之后,并创建成一个Class对象的过程,就称之为类加载。
(补充说明:任何一个class文件当类加载到jvm之后都会为其创建一个唯一的Class对象(元对象),在后续的实例化过程中,都是通过这个Class对象来创建类的实例。所以Class对象是反射的基石。)
在java中,类加载器可以分为三类:
1.启动类加载器(BoorStrap ClassLoader)
启动类加载器石负责加载JDK核心包下的类文件,对应的目录就是
“JDK安装目录/jre/lib”。其中最重要的一个jar文件就是rt.jar
注意:这个加载器我们石没办法取操作的,因为它本身使用C++语言实现。
2.扩展类加载器(Extension ClassLoader)
这个类加载器,是由启动类加载器来加载的。扩展类加载器是用java语言实现,
它主要负责加载JDK里面的扩展的jar文件。对应的目录是"JDK安装目录/jre/lib/ext"
3.应用程序类加载器(Application ClassLoader)
这个类加载器也是使用java语言实现,它同样由启动类加载器所加载。它主要负责加载我 们开发人员所编写的java类,通常对应的目录就是环境变量下的ClassPath路径
注:不同的类加载器创建出来的类是不相同的
JVM的类加载是基于双亲委托模型。也就是当我们编写任意一个类的时候,本身并不是由应用程序类加载器立即加载,而是先委托给父类加载器去加载,当父加载器在自己所加载的范围内找不到对应的class文件时,最后菜会将加载权交回给子类加载器去加载。这样做的目的是为了保证jvm的安全加载机制