Java开发基础知识之学习篇——双亲委派机制

Java自带的类加载器:
启动类加载器(Bootstrap ClassLoader):这是由C++语言实现的一个加载器,是虚拟机的一部分,随虚拟机启动运行。负责将存放在/lib目录下面或者被-Xbootclasspath参数所指定的路径中的类。
扩展类加载器(Extension ClassLoader):负责加载/lib/ext目录中的,或者被java.ext.dir系统变量指定路径中的所有类库。如果把自己的jar包放到此位置,会首先用这个加载器加载。
应用程序类加载器(Application ClassLoader):负责加载用户类路径(ClassPath)上所指定的类库,如果程序中没有自定义自己的类加载器,这个就是默认加载器。
  

所谓的双亲委派,则是先让父类加载器试图加钞该class,只有在父类加载器无法加载该类时才尝试从自己的类路径中加载该类。通俗的讲,就是某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父加载器,依次递归,如果父加载器可以完成类加载任务,就成功返回,只有父加载器无法完成此加载任务时,才自己去加载。
  刚才我们说了,一个类加载器在加载一个类的时候,会让父类加载器先去加载,而这个父类加载器是什么呢,如下图:

  双亲委派模式是指:

  如果一个类收到了类加载的请求,不会自己先尝试加载,先找父类加载器去完成。当顶层启动类加载器无法加载这个类的时候,子类才会尝试自己去加载。当回到最先的发起者加载器还无法加载时,并不会再向下找,而是抛出异常(ClassNotFound).

  特殊的地方,如果类A中引用了类B,java虚拟机将使用加载类A的类加载器来加载类B

原文地址:https://www.cnblogs.com/cokeHuan/p/12609014.html

时间: 2024-10-11 07:09:46

Java开发基础知识之学习篇——双亲委派机制的相关文章

Java开发基础知识之学习篇——Object类

JDK中所有类的基类——java.lang.Object 1.类构造器 创建java对象的途径之一,通过new关键字调用构造器完成对象的实例化,或通过构造器对象进行相应的初始化.在JDK的objec类源码中,系统会自动添加一个无参构造器. public object(){ Object obj = new Object(); //构造一个Object类的对象 } 2.registerNatives方法 静态代码块是一个类子啊初始化过程中必定会执行的内容,所以在类加载时会执行该方法,通过该方法来注

Java开发基础知识之学习篇——String

String .StringBuffer 和StringBuilder 的区别是什么?从几个方面来解释. 1.可变性 String类中使用final关键字字符数组保存字符串,它的长度是不可变的. StringBuffer 和 StringBuilder 都继承自AbstractStringBuilder类,而在AbstractStringBuilder中也是使用字符数组保存字符串,但是没有用final关键字修饰,所以这两种对象都是可变的. 2.线程安全性 String中的对象是不可变的,就是常量

Java开发基础知识之规范篇——排版规范

网上流行的开发规范有很多,阿里巴巴.华为开发规范等等,当往往看得最舒服的才是最适合自己! 简单汇总了一下以往自己在项目开发中的编码风格规范: 1.程序块要采用缩进风格编写,缩进的空格数为4个. 2.分界符(如大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐.在函数体的开始.类和接口的定义.以及if.for.do.while.switch.case语句中的程序都要采用如上的缩进方式. 3.较长的语句.表达式或参数(>80字符)要分成多行书写,长表达式要在低优先级操作符处

java类加载过程以及双亲委派机制

前言:最近两个月公司实行了996上班制,加上了熬了两个通宵上线,状态很不好,头疼.牙疼,一直没有时间和精力写博客,也害怕在这样的状态下写出来的东西出错.为了不让自己荒废学习的劲头和习惯,今天周日,也打算写一篇博客,就算是为了给自己以前立的flag(每个月必须写几篇博客)的实现.那么本次博客的主题我选择了java的类加载过程的探究以及双亲委派机制模型以及它被破坏的场景,搞清楚这个对于我们理解java的类加载过程以及面试中都是很有必要的. 本篇博客的目录 一:类加载器 二:类加载的过程和阶段 三:双

深入JVM系列(三)之类加载、类加载器、双亲委派机制与常见问题

一.概述 定义:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型.类加载和连接的过程都是在运行期间完成的. 二. 类的加载方式 1):本地编译好的class中直接加载 2):网络加载:java.net.URLClassLoader可以加载url指定的类 3):从jar.zip等等压缩文件加载类,自动解析jar文件找到class文件去加载util类 4):从java源代码文件动态编译成为class文件 三.类加载的时机

iOS开发——总结篇&IOS开发基础知识

IOS开发基础知识 1:Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id) 对象在运行时获取其类型的能力称为内省.内省可以有多种方法实现. 判断对象类型 -(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例 -(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例 实例一: Person *person = [[Person alloc] init]; //父

IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现.Http短连接主要用于从服务器读取各种持久化信息:比如用户信息.聊天历史记录.好友列表等等,长连接则是用于实时的聊天消息或指令的接收和发送. 作为IM系统中不可或缺的技术,Http短连的重要性无可替代,但Http作为传统互联网信

什么才是java的基础知识?

近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考. 我做j2ee开发已经超过十载,作为过来人,心路历程估计和大家差不多.编码的前几年,很长一段时间觉得java简单,开发实现各种功能都很轻松,代码写起来根本不费劲(主要是因为写的代码都是一些功能业务逻辑).但同时自己心里明白,自己其实没有什么水平,自己这3,4年以来学懂的东西就那么多,其他人几个月就可以

Java Web基础知识之Filter:过滤一切你不想看到的事情

不要相信客户端, 所以做后端的人都应该铭记的事情.因为前端传过来的数据并不总是合法和有效的,所以后端是对访问资源的最后一道保护伞.之前我们在Spring中说到过AOP编程,AOP基础知识,它就可以在执行我们的方法之前进行一些预处理和验证来保护后端的资源.不难想到她的实现方式和本篇要说的过滤器的实现原理应该是相同的,都是通过Java的动态代理实现的(自己的理解). 在Java Web的开发中,过滤器用于拦截请求,并对ServletRequest对象进行处理,我们可以想到的,它可以用来验证权限.加密