一、类加载器(Class Loader)
1、类加载器的分类:
① 启动类加载器(根加载器)
(BootstrapClassLoader); ② 扩展类加载器
(ExtClassLoader);
③ 应用程序类加载器(系统类加载器)
(AppClassLoader);④ 自定义类加载器
(Custom).
2、类加载器的作用:
(1)加载字节码
:将由.Java文件通过编译器编译而成的.class加载到JVM中,以此在元空间(JDK8)中形成该类的类模板信息;
(2)创建Class对象
:在JVM中有了字节码后,会在堆空间中
通过字节码来创建对应的Class对象,只有有了Class对象后,才可以通过new关键字、反射机制、工厂Factory、静态内部类
等方式创建实例对象,以上创建对象的方式本质都是通过无参构造器来创建对象的。(JVM调用< init > 方法
)
3、双亲委派机制图解:
4、其实这四个类加载器也可以分为两大类:一类是启动类加载器
,另一类是自定义加载器
(这里的自定义指的是java语言自定义)
(1)启动类加载器(C++层面):这个是最顶级的类加载器,JVM启动就首先启动该类加载器,然后启动类加载器会去启动扩展类加载器和系统类加载器等。它是C++实现
,所以我们在Java层面是获取不到的。
public static void main(String[] args) {
// 1、获取系统类加载器---可以获取到
// (1) 方式一 : 使用当前线程获取
System.out.println(Thread.currentThread(