Java类加载器、双亲委派机制及作用、加载不到类所报异常ClassNotFoundException

本文详细介绍了Java的类加载器,包括BootstrapClassLoader、ExtClassLoader、AppClassLoader和自定义类加载器。重点阐述了双亲委派机制的重要性,如防止类重复加载和确保核心API安全。此外,还讨论了如何破坏双亲委派以及ClassNotFoundException和NoClassDefFoundError的区别和产生原因。
摘要由CSDN通过智能技术生成

一、类加载器(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(
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值