Java类加载器 和 双亲委派【详解】

一.类加载器:

        由JDK提供的,用于加载一些资源文件到JVM内存里的一项技术。主要是加载class文件到内存,也可以加载一些资源文件。

        

2.JDK提供了三个类加载器:

  • BootstrapClassLoader:引导类加载器, 是c语言编写的。

    用于加载JDK的核心类,加载 jre/lib/rt.jar

  • ExtClassLoader:扩展类加载器,是Java编写的,使用很少

    用于加载一些扩展程序 jre/lib/ext/*.jar,目前几乎不用了

  • SystemClassLoader:或者叫AppClassLoader, 系统类加载器,是Java编写的

    用于加载我们写的类、第三方jar包里的类

3.获取类加载器SystemClassLoader:我们的类.class.getClassLoader()

import java.io.*;/*** @author liuyp* @since 2024/02/29*/
public class Demo01ClassLoader {public static void main(String[] args) throws Exception {ClassLoader classLoader = Demo01ClassLoader.class.getClassLoader();System.out.println("classLoader = " + classLoader);//我们应该把资源文件放到当前Module的类路径下(src);类加载器就从src下查找文件// InputStream is = classLoader.getResourceAsStream("abc.txt");InputStream is = classLoader.getResourceAsStream("demo05/hello.txt");BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"));String line = reader.readLine();System.out.println("line = " + line);reader.close();}
}

二.双亲委派       

         1.先传到AppClassLoader,寻找缓冲,如果找到直接用,不需要加载,找不到传到父加载类extClassLoader
        2.寻找缓冲,如果找到直接用,不需要加载,找不到传到父加载类bootstraptClassLoader
        3.寻找缓冲,如果找到直接用,不需要加载,找不到就自己加载
        4.bootstrapClassLoader从rt.jar里先尝试加载,如果找到就直接用,找不到就传extClassLoader
        5.扩展类加载器从jre/lib/ext里加载如果能加载到就直接用,加载不到就传到appClassLoader
        6.程序类加载器从src或者jar包里找,如果找到直接用,找不到报ClassNotFoundException错误

作用:防止重复加载类和篡改类
                1.当一个类加载成功之后,会缓存起来,下次在用时,直接取缓冲的值不会重复加载
                2.自己定义java.lang.String,它在引导类加载器,自己创建在程序类加载器,当所有加载器缓存中找不时,从引导类加载器开始加载类,最后才是程序类加载器,所以用的一定是jdk的Sstring

        

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/502948.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot项目实战

文章目录 SpringBootVue后台管理系统所需软件下载、安装、版本查询Vue搭建一个简单的Vue项目 *Spring项目项目架构 SpringBootVue后台管理系统 学习视频: https://www.bilibili.com/video/BV1U44y1W77D/?spm_id_from333.337.search-card.all.click&vd_sourcec…

vscode设置打开浏览器

安装这个插件 Open Browser Preview

ORACLE 基础

一.ORACLE简介 1.1什么是oracle ORACLE 数据库系统是美国 ORACLE 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或 B/S 体系结构的数据库之一。 ORACLE 通常应用于大型系统的数据库产品。…

最佳实践:Websocket 长连接状态如何保持

WebSocket 是一种支持通过单个 TCP 连接进行全双工通信的协议,相较于传统的 HTTP 协议,它更适合需要实时交互的应用场景。此协议在现代 Web 应用中扮演着至关重要的角色,尤其是在需要实时更新和通信的场合下维持持久连接。本文将探讨 WebSock…

VSCODE SFTP本地上传文件报错

之前都是好好的,突然今天上传文件报错。误打误撞发现解决方式 [03-01 09:29:08] [error] Error: Failureat 101 (c:\Users\d1312117\.vscode\extensions\natizyskunk.sftp-1.16.3\node_modules\ssh2\lib\protocol\SFTP.js:2854:19)at SFTP.push (c:\Users\d1312117\…

瑞_Redis_Redis的Java客户端

文章目录 1 Redis的Java客户端1.1 Jedis快速入门1.1.1 入门案例1.1.1.1 项目构建1.1.1.2 引入依赖1.1.1.3 建立连接1.1.1.4 释放资源1.1.1.5 测试1.1.1.6 完整测试类代码 1.1.2 Jedis连接池1.1.2.1 连接池工具类1.1.2.2 改造原始代码 1.2 SpringDataRedis1.2.1 RedisTemplate1.…

【快速选择】解决TopK问题

目录 一、什么是TopK问题 二、优先级队列 优先级队列介绍 代码实现 三、使用优先级队列解决TopK问题 四、快速选择算法解决TopK问题 快速选择 图解快速选择 代码解决前k小个元素 五、优先级队列与快速选则算法比较 优先级队列 快速选择 一、什么是TopK问题 TopK问题…

精酿啤酒:创新原料的研发与市场前景

随着消费者口味和需求的不断变化,创新已成为啤酒行业持续发展的重要驱动力。Fendi Club啤酒在创新原料的研发方面走在行业前列,积极探索新型原料和风味组合,以满足市场对多样化、个性化产品的需求。 Fendi Club啤酒注重研发新型原料和添加剂。…

节省时间,创造价值:人工智能在工作中的实际应用

AI时代的工作流程:智能化操作,创新不止步 在当前的人工智能技术领域,无论是国内研发还是国际上的先进大型模型,本质上均采用了GPT,即生成式预训练Transformer模型。该模型的核心能力在于基于已学习的知识库生成回答。其…

数据分析-Pandas数据探查初步圆饼图

数据分析-Pandas数据探查初步圆饼图 数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律? 数据表&am…

使用css的transition属性实现抽屉功能

需求 使用css手写一个抽屉&#xff0c;并且不能遮挡住原来的页面 效果&#xff1a;&#xff08;录的gif有点卡&#xff0c;实际情况很丝滑&#xff09; 实现代码&#xff1a; <template><div class"dashboard-container"><div class"mainBox&…

python模型训练

目录 1、新建模型 train_model.py 2、运行模型 &#xff08;1&#xff09;首先会下载data文件库 &#xff08;2&#xff09;完成之后会开始训练模型&#xff08;10次&#xff09; 3、 训练好之后&#xff0c;进入命令集 4、输入命令&#xff1a;python -m tensorboard.ma…