一、在JVM中位置
存在于JRE(Java运行环境)中。将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后在堆中生成一个代表这个类的 java.lang.Class 对象,作为这个方法区中类数据的访问入口。
Java运行流程.png
二、分类
1.启动类(根)加载器(BootStrap):加载java核心库; java程序获取不到;加载jre\lib\rt.jar包。
2.扩展类加载器(Ext): 加载java扩展库;加载 \jre\lib\ext 文件中jar包;
3.应用程序加载器(App): 加载应用程序中的内容;
4.用户自定义类加载器(Custom)
三、双亲委派机制
jvm运行类之前,寻找类的顺序为先向上寻找:根加载器 --> 扩展类加载器 --> 应用程序加载器 --> 用户自定义类加载器。
当某个类加载器需要加载某个.class
文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。以此保证核心.class
文件不会被篡改。
四、ClassLoder类
- 获取系统类的加载器:
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
- 获取对象的加载器:
ClassLoader classLoader = "对象名".getClassLoader();