首页 > 编程语言 >【java编程】双亲委派模式

【java编程】双亲委派模式

时间:2024-11-28 20:34:50浏览次数:5  
标签:Bootstrap java ClassLoader 编程 双亲 class 加载

双亲委派模式

图文解释

一个类加载器查找class和resource时,是通过委托模式进行的,它首先判断这个class是不是已经加载成功,如果没有的话它并不是自己进行查找,而是先通过父加载器,然后递归下去,直到Bootstrap ClassLoader,如果Bootstrap classloader找到了,直接返回,如果没有找到,则一级一级返回,最后到达自身去查找这些对象, 这种机制就叫做双亲委托。

具体可以参考下图:

代码解释

只有代码图不顶用, 下面我们跟进源代码进行Debug查看一下:

Bootstrap ClassLoader是由C/C++编写的,它本身是虚拟机的一部分,所以它并不是一个JAVA类,也就是无法在java代码中获取它的引用,
JVM启动时通过Bootstrap类加载器加载rt.jar等核心jar包中的class文件,之前的int.class,String.class都是由它加载。
然后呢,我们前面已经分析了,JVM初始化sun.misc.Launcher并创建Extension ClassLoader和AppClassLoader实例。
并将ExtClassLoader设置为AppClassLoader的父加载器。Bootstrap没有父加载器,但是它却可以作用一个ClassLoader的父加载器。
比如ExtClassLoader。这也可以解释之前通过ExtClassLoader的getParent方法获取为Null的现象。

使用双亲委派模式的好处则是, 我们无法去替换Java核心API, 例如:

当然, 类加载器也解决了重复加载问题。

标签:Bootstrap,java,ClassLoader,编程,双亲,class,加载
From: https://www.cnblogs.com/o-O-oO/p/18575104

相关文章

  • 14Java Lambda、方法引用、算法、正则表达式
    一、Arrays类接下来我们学习的类叫做Arrays,其实Arrays并不是重点,但是我们通过Arrays这个类的学习有助于我们理解下一个知识点Lambda的学习。所以我们这里先学习Arrays,再通过Arrays来学习Lamdba这样学习会更丝滑一些^_^.1.1Arrays基本使用我们先认识一下Arrays是干什么用的,A......
  • 15Java集合进阶(异常、集合)
    一、异常1.1认识异常接下来,我们学习一下异常,学习异常有利于我们处理程序中可能出现的问题。我先带着同学们认识一下,什么是异常?我们阅读下面的代码,通过这段代码来认识异常。我们调用一个方法时,经常一部小心就出异常了,然后在控制台打印一些异常信息。其实打印的这些异常信息......
  • 16Java集合进阶(Set、Map集合、可变参数、斗地主案例)
    请先看我上篇文章15Java集合进阶(异常、集合)-CSDN博客一、Set系列集合1.1认识Set集合的特点Set集合是属于Collection体系下的另一个分支,它的特点如下图所示下面我们用代码简单演示一下,每一种Set集合的特点。//Set<Integer>set=newHashSet<>(); //无序、无索引、不重......
  • 【java编程】Java 类加载器
    jvm启动的时候,并不会一次性加载所有的class文件,而是根据需要去动态加载.否则一次性加载那么多jar包那么多class,那内存将崩溃.Java类加载器Java类加载流程Java语言系统自带有三个类加载器,分别为如下:BootStrapClassLoaderBootstrapClassLoader:最顶层的加载类,......
  • 【java编程】Java 类 && Class 文件
    jvm启动的时候,并不会一次性加载所有的class文件,而是根据需要去动态加载.否则一次性加载那么多jar包那么多class,那内存将崩溃.Java类&&Class文件定义Heihu577.java文件,内容如下:publicclassHeihu577{publicstaticvoidmain(String[]args){Syst......
  • Java class 文件安全加密工具对比+ClassFinal实战
    前言常见加密方案对比XJarProGuardClassFinalClassFinal实战纯命令方式maven插件方式最后前言相信不少的同学开发的软件都是用户商业化,对于这些商业运营的项目很多都会直接部署在客户方,这样就可能会导致项目源码泄露。当然,作为Java语言的搬砖人......
  • 面向对象编程(基础部分)
    java设计者,引入OOP,根本原因是,现有技术不能完美解决新的需求0eg:张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。还有一只叫小花,今年100岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误,则显示张老太没有这只猫猫。1.......
  • 良好的编程习惯
    作为一名Java开发工程师,养成良好的编程习惯可以提高代码的可读性、可维护性和效率。以下是一些良好的编程习惯及其反例:1.代码风格和命名规范良好习惯:使用有意义的变量、方法和类名,遵循Java的命名规范(如类名用大写驼峰,变量和方法用小写驼峰)。使用一致的代码风格,如缩......
  • Java 编程的经典反例及其事故分析
    Java编程的经典反例及其事故分析Java作为一种广泛使用的编程语言,凭借其稳定性和可移植性在众多领域中占据了重要地位。然而,即便是最强大的语言,也会因为不良的编程习惯而导致严重的事故。本文将列举几个经典的Java编程反例,并分析这些反例背后的原因及其可能带来的影响......
  • 摩尔线程 国产显卡 MUSA 并行编程 学习笔记-2024/11/28
    LearningRoadmap:Section1:IntrotoParallelProgramming&MUSADeepLearningEcosystem(摩尔线程国产显卡MUSA并行编程学习笔记-2024/11/20)Ubuntu+Driver+Toolkit+conda+pytorch+torch_musa环境安装(摩尔线程国产显卡MUSA并行编程学习笔记-2024/11/24-CSDN博客)C/C++R......