理解双亲委派模式

简介: 理解双亲委派模式

3、初始化
初始化阶段是执行类构造器() 方法的过程。类构造器()方法是由编译器自动收藏类中的所有类变量的赋值动作和静态语句块(static块)中的语句合并产生,代码从上往下执行。

当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化

虚拟机会保证一个类的() 方法在多线程环境中被正确加锁和同步

总结就是:初始化是为类的静态变量赋予正确的初始值

类加载器的介绍
启动(Bootstrap)类加载器
扩展(Extension)类加载器
系统类加载器
自定义加载器
根类加载器(bootstrap class loader)
它用来加载 Java 的核心类,是用原生代码来实现的,并不继承自 java.lang.ClassLoader(负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类)。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。

扩展类加载器(extensions class loader)
扩展类加载器是指Sun公司(已被Oracle收购)实现的sun.misc.Launcher$ExtClassLoader类,由Java语言实现的,是Launcher的静态内部类,它负责加载<JAVA_HOME>/lib/ext目录下或者由系统变量-Djava.ext.dir指定位路径中的类库,开发者可以直接使用标准扩展类加载器。

系统类加载器(system class loader)
被称为系统(也称为应用)类加载器,它负责在JVM启动时加载来自Java命令的-classpath选项、java.class.path系统属性,或者CLASSPATH换将变量所指定的JAR包和类路径。程序可以通过ClassLoader的静态方法getSystemClassLoader()来获取系统类加载器。如果没有特别指定,则用户自定义的类加载器都以此类加载器作为父加载器。由Java语言实现,父类加载器为ExtClassLoader。(Java虚拟机采用的是双亲委派模式即把请求交由父类处理,它一种任务委派模式,)

类加载器加载Class大致要经过如下8个步骤:

检测此Class是否载入过,即在缓冲区中是否有此Class,如果有直接进入第8步,否则进入第2步。
如果没有父类加载器,则要么Parent是根类加载器,要么本身就是根类加载器,则跳到第4步,如果父类加载器存在,则进入第3步。
请求使用父类加载器去载入目标类,如果载入成功则跳至第8步,否则接着执行第5步。
请求使用根类加载器去载入目标类,如果载入成功则跳至第8步,否则跳至第7步。
当前类加载器尝试寻找Class文件,如果找到则执行第6步,如果找不到则执行第7步。
从文件中载入Class,成功后跳至第8步。
抛出ClassNotFountException异常。
返回对应的java.lang.Class对象

理解双亲委派模式
双亲委派机制,其工作原理的是,如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式,即每个儿子都很懒,每次有活就丢给父亲去干,直到父亲说这件事我也干不了时,儿子自己才想办法去完成。

相关文章
|
缓存 安全 程序员
【ARM学习】Cortex- A系列程序员学习指南
【ARM学习】Cortex- A系列程序员学习指南
807 0
mAP@0.5与mAP@0.50.95的含义,YOLO
mAP@0.5与mAP@0.50.95的含义,YOLO
3150 0
|
12月前
|
人工智能 架构师 机器人
我是怎么把我的 AI 从“傻瓜”重构成“专家”的
本文分享了一次 Agent 项目的重构经验,讲述如何将一个僵化、被动的指令式系统,升级为具备内在驱动力的“专家”Agent。通过引入“动机层”和“成长机制”,让 Agent 更加主动、灵活并能自我优化,最终实现从“流水线工人”到“资深顾问”的蜕变。
|
7月前
|
SQL 弹性计算 安全
阿里云国际站服务器防火墙怎么关闭?防火墙部署方式有哪些?
阿里云国际站服务器防火墙怎么关闭?防火墙部署方式有哪些?
581 2
|
存储 文件存储 对象存储
使用OSS快速搭建个人网盘
通过本实验,用户可学会如何创建OSS bucket,并利用oss自有的图形化工具来作为个人网盘进行上传下载等操作,帮助用户0代码文件上云。
|
人工智能 算法 定位技术
[AI aider] 打造终端AI搭档:Aider让编程更智能更有趣!
发现Aider,一个能在终端中与AI搭档编程的工具,让你的编程体验更智能、更有趣。
1027 1
[AI aider] 打造终端AI搭档:Aider让编程更智能更有趣!
|
PHP 开发者
如何用Composer管理PHP项目的第三方扩展包
【7月更文挑战第2天】**Composer 是PHP开发的关键工具,用于管理项目依赖。安装需PHP 5.6.4+,通过官网脚本安装。在项目根目录创建 `composer.json` 文件定义依赖,使用 `composer require` 命令安装扩展包,如Guzzle。`composer.lock` 保证版本一致。`require_once &#39;vendor/autoload.php&#39;;` 实现自动加载。更新依赖用 `composer update`,管理依赖提升效率和项目维护性。深入学习可发掘更多高级功能。**
652 0
|
存储 缓存 程序员
DP读书:《openEuler操作系统》(四)鲲鹏处理器
DP读书:《openEuler操作系统》(四)鲲鹏处理器
930 0
|
机器学习/深度学习 自然语言处理 算法
RNN、CNN、RNN、LSTM、CTC算法原理,pytorch实现LSTM算法
RNN、CNN、RNN、LSTM、CTC算法原理,pytorch实现LSTM算法
957 0