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.mzph.cn/news/713624.shtml

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

相关文章

界面控件DevExpress .NET MAUI v23.2新版亮点 - 拥有全新的彩色主题

DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 今年第一个重要版本v23.1正式发布,该版本拥有众多…

如何克隆树莓派系统到较小的硬盘/SD卡上(如何分区、设置修复引导)

最近有个老固态硬盘空下来了,虽然写入速度没那么快,但是足够满足千兆网络了,所以我就想把现在给树莓派使用的固态硬盘换下来。由于一些设置很浪费时间,所以我不打算重装系统。此外这个老固态是 120GB 的,要小于正在使用…

redis实现分布式全局唯一id

目录 一、前言二、如何通过Redis设计一个分布式全局唯一ID生成工具2.1 使用 Redis 计数器实现2.2 使用 Redis Hash结构实现 三、通过代码实现分布式全局唯一ID工具3.1 导入依赖配置3.2 配置yml文件3.3 序列化配置3.4 编写获取工具3.5 测试获取工具 四、运行结果 一、前言 在很…

leetcode 热题 100_最长连续序列

题解一: 哈希表:找连续最长的数字序列,很容易联想到排序,但排序的时间复杂度O(nlogN)过大,判题容易超时。因此我们需要使用哈希表来快速查找,序列中是否存在与某个数相邻的数。用HashSet建立哈希表并去重&a…

【Javascript编程实操02】1、判断一个年份是闰年还是平年 2、找到三个数中最小的数

目录 前言 1、判断一个年份是闰年还是平年 原理: 代码: 实现效果: 2、找到三个数中最小的数 流程图: 代码: 实现效果: 总结 前言 本次继续针对Javascript阶段的if...else...的实操练习&#xff0…

IDEA 配置股票插件

IDEA配置股票基金实时查看插件,步骤如下: 打开Settings,找到Plugins,在Marketplace中搜索:Money Never Sleeps,如下图所示: Money Never Sleeps是IntelliJ IDEA平台插件. 支持查看股票实时行情…

three.js 叉乘判断物体在人前左,前右,后左、后右

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs"></div><div style"padding: 10px;text-align: left;">叉乘判断物体…

加密与安全_探索对称加密算法

文章目录 概述常用的对称加密算法AESECB模式CBC模式 (推荐)ECB VS CBC 附&#xff1a;AES工具类总结 概述 对称加密算法是一种加密技术&#xff0c;使用相同的密钥来进行加密和解密数据。在这种算法中&#xff0c;发送方使用密钥将明文&#xff08;未加密的数据&#xff09;转…

14:00面试,14:07就出来了,问的问题过于变态了。。。

我从一家小公司转投到另一家公司&#xff0c;期待着新的工作环境和机会。然而&#xff0c;新公司的加班文化让我有些始料未及。虽然薪资相对较高&#xff0c;但长时间的工作和缺乏休息使我身心俱疲。 就在我逐渐适应这种高强度的工作节奏时&#xff0c;公司突然宣布了一则令人…

kafka学习笔记三

目录 第二篇 外部系统集成 第三篇 生产调优手册 第1章 kafka硬件配置选择 第2章 生产者调优 2.1 生产者核心参数配置 2.2 生产者如何提高吞吐量 2.3 数据可靠性 2.4 数据去重 2.5 数据有序 2.6 数据乱序 第3章 Kafka Broker调优 3.1 Broker核心参数配置 3.2 其他 …

禅道:提bug、管理case 7.0

一、禅道的介绍 &#xff08;1&#xff09;定义禅道是一个项目管理工具&#xff0c;也是一个bug管理工具&#xff0c;还是一个用例管理工具。 &#xff08;2&#xff09;作用&#xff1a;为了解决众多企业在管理中出现混乱&#xff0c;无序的现象&#xff0c;开发出来 &…

ppt中调整某条表格框线的格式

1、先设置好边框线的属性&#xff1a; 2、选择要调整的边框线所在的单元格&#xff08;第二列的右边框加粗&#xff0c;体现分栏的效果&#xff09; 3、设计--边框--中选择要调整的边框线位置&#xff08;假设要调整右框线&#xff09;

libvirt命名空间xmlns:qemu的使用

示例xml <domain type{domain_type} xmlns:qemuhttp://libvirt.org/schemas/domain/qemu/1.0><qemu:commandline><qemu:commandline><qemu:arg value-newarg/><qemu:env nameQEMU_ENV valueVAL/></qemu:commandline></domain>"…

13、输入捕获实验

目录 一、通用定时器输入捕获概述 二、常用寄存器和库函数配置 三、输入捕获实验讲解 一、通用定时器输入捕获概述 STM32输入捕获工作过程&#xff08;通道1为例&#xff09; 一句话总结工作过程&#xff1a; 通过检测TIMx_CHx上的边沿信号&#xff0c;在边沿信号发生跳变…

28.HarmonyOS App(JAVA)多页签的实现(Tab)

HarmonyOS App(JAVA)多页签的实现&#xff08;Tab&#xff09; 页面可左右滑动&#xff0c;点击界面1,2,3切换到对应界面 PageSlider的创建和使用 在layout目录下的xml文件中创建PageSlider。 <PageSlider ohos:id"$id:page_slider" ohos:height"300vp&…

2D割草/吸血鬼游戏 性能优化——GPU Spine动画

视频中万人同屏方案(gpu动画、渲染、索敌、避障等功能)&#xff0c;可某宝搜店铺&#xff1a;【游戏开发资源商店】获取整套方案源码。 在过去的几年里&#xff0c;割草、类吸血鬼玩法的游戏频出爆款&#xff0c;其丰富的技能、满屏特效、刷怪清屏的解压畅快是此类游戏的核心&…

【MySQL】复合查询(重点)-- 详解

一、基本查询练习回顾 1、查询工资高于 500 或岗位为 MANAGER 的雇员&#xff0c;同时还要满足他们的姓名首字母为大写的 J 2、按照部门号升序而雇员的工资降序排序 3、使用年薪进行降序排序 4、显示工资最高的员工的名字和工作岗位 5、显示工资高于平均工资的员工信息 6、显…

韦东山嵌入式Liunx入门驱动开发四

文章目录 一、异常与中断的概念及处理流程1-1 中断的引入1-2 栈(1) CPU实现a ab的过程(2) 进程与线程 1-3 Linux系统对中断处理的演进1-4 Linux 中断系统中的重要数据结构(1) irq_desc 结构体(2) irqaction 结构体(3) irq_data 结构体(4) irq_domain 结构体(5) irq_domain 结构…

Redis入门与应用

Redis入门与应用 Redis的技术全景 Redis一个开源的基于键值对&#xff08;Key-Value&#xff09;NoSQL数据库。使用ANSI C语言编写、支持网络、基于内存但支持持久化。性能优秀&#xff0c;并提供多种语言的API。 两大维度 两大维度&#xff1a;应用维度、底层原理维度 我们…

记一次dockerfile无法构建问题追溯

我有一个dockerfile如下&#xff1a; ENTRYPOINT ["/sbin/tini"&#xff0c;"-g", "--"] CMD /home/scrapy/start.sh 我原本的用意是先启动tini&#xff0c;再执行下面的cmd命令启动start.sh。 为啥要用tini&#xff1f; 因为我的这个docker…