前言

Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象,而且,加载某个类的class文件时,Java虚拟机采用的是双亲委派机制,即把请求交由父类处理,它是一种任务委派模式

工作原理

(1)如果一个类加载器收到了类加载请求,它并不会自己先加载,而是把这个请求委托给父类的加载器去执行

(2)如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的引导类加载器;

(3)如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成加载任务,子加载器才会尝试自己去加载,这就是双亲委派机制

(4)父类加载器一层一层往下分配任务,如果子类加载器能加载,则加载此类,如果将加载任务分配至系统类加载器也无法加载此类,则抛出异常

代码示例

举例 1 :

我自己建立一个 java.lang.String 类,写上 static 代码块

package java.lang;public class String {static{System.out.println("我是自定义的String类的静态代码块");}
}

在另外的程序中加载 String 类,看看加载的 String 类是 JDK 自带的 String 类,还是我们自己编写的 String 类

public class StringTest {public static void main(String[] args) {java.lang.String str = new java.lang.String();System.out.println("hello,atguigu.com");StringTest test = new StringTest();System.out.println(test.getClass().getClassLoader());}
}

程序并没有输出我们静态代码块中的内容,可见仍然加载的是 JDK 自带的 String 类

为什么呢?
由于我们定义的String类本应用系统类加载器,但它并不会自己先加载,而是把这个请求委托给父类的加载器去执行,到了扩展类加载器发现String类不归自己管,再委托给父类加载器(引导类加载器),这时发现是java.lang包,这事就归引导类加载器管,所以加载的是 JDK 自带的 String 类

举例 2 :

在我们自己的 String 类中整个 main() 方法

package java.lang;public class String {static{System.out.println("我是自定义的String类的静态代码块");}//错误: 在类 java.lang.String 中找不到 main 方法public static void main(String[] args) {System.out.println("hello,String");}
}

由于双亲委派机制找到的是 JDK 自带的 String 类,但在引导类加载器的核心类库API里的 String 类中并没有 main() 方法

举例 3:

在 java.lang 包下整个 ShkStart 类 (自定义类名)

package java.lang;public class ShkStart {public static void main(String[] args) {System.out.println("hello!");}
}

出于保护机制,java.lang 包下不允许我们自定义类

双亲委派机制优势

通过上面的例子,我们可以知道,双亲机制可以

  • 避免类的重复加载
  • 保护程序安全,防止核心API被随意篡改
    • 自定义类:java.lang.String (没用)
    • 自定义类:java.lang.ShkStart(报错:阻止创建 java.lang开头的类)

详谈双亲委派机制(面试常问)相关推荐

  1. java 委托_面试官:java双亲委派机制及作用

    什么是双亲委派机制 当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类. 类加载器的类别 Bootst ...

  2. 【有料】面试必备:什么时候要打破双亲委派机制?什么是双亲委派? (图解+秒懂+史上最全)

    面试题:什么时候要打破双亲委派机制 来自社群的两个面试题,其实也是两个基础的 面试题,大家一定要掌握 社群问题: 先说下第一题的结论 场景1: 如果委托类没有实现接口的话,就不能使用newProxyI ...

  3. 面试必备:什么时候要打破双亲委派机制?什么是双亲委派? (图解+秒懂+史上最全)

    文章很长,建议收藏起来慢慢读!疯狂创客圈总目录 语雀版 | 总目录 码云版| 总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 经典图书:<Java高并发核心编程(卷1)> 面试必备 ...

  4. 【04-JVM面试专题-什么是双亲委派机制(父类委托机制)?如何打破双亲委派机制?双亲委派机制的优缺点?什么是沙箱安全机制呢?】

    什么是双亲委派机制?如何打破双亲委派机制? JVM的双亲委派机制知道吗?怎么打破它呢?你看看自己掌握的怎么样呢? 什么是双亲委派机制?(父类委托机制) 检查某个类是否已经加载 自底向上,从Custom ...

  5. 双亲委派机制_面试官:双亲委派机制的原理和作用是什么?

    说到双亲委派机制,就必须要先要弄清楚Java的类加载器 什么是类加载器 Java类加载器(ClassLoader)是Java运行时环境(JRE)的一部分,负责动态的将Java类加载到Java虚拟机的内 ...

  6. jvm面试 -- 谈谈ClassLoader ,ClassLoader的双亲委派机制 , loadClass和forName的区别

    谈谈ClassLoader ? ClassLoader的双亲委派机制 ? loadClass和forName的区别 ?

  7. java 类加载 双亲委派_Java类加载器和双亲委派机制

    前言 之前详细介绍了Java类的整个加载过程(类加载机制详解).虽然,篇幅较长,但是也不要被内容吓到了,其实每个阶段都可以用一句话来概括. 1)加载:查找并加载类的二进制字节流数据. 2)验证:保证被 ...

  8. 阿里预面:谈谈你对双亲委派机制的理解?这个名字有啥问题?如何打破?为啥双亲委派?...

    前情回顾 秋招面试中,我每次面试似乎都被问到关于JVM双亲委派的相关问题. 我先考考你:你是怎么理解双亲委派机制的?这个名字你有没有觉得有问题?能举个简单例子说明一些双亲委派吗?双亲委派有何好处?如何 ...

  9. Java基础(以及面试常问问题)

    1.Vector,ArrayList, LinkedList的区别(面试常问到的) 三者都是实现集合框架中的List,也就是所谓有序集合,因此具体功能比较近似,比如都提供按照位置进行定位.添加或删除的 ...

  10. 程序员开发指南!java面试常问问题

    正文 如果你参加过一些大厂面试,肯定会遇到一些开放性的问题: 1. 写一段程序,让其运行时的表现为触发了5次Young GC.3次Full GC.然后3次Young GC: 2. 如果一个Java进程 ...

最新文章

  1. Eclipse 官宣,要干掉 VS Code,你怎么看?
  2. 面对0基础学IT的一些感想
  3. 利用gulp,当引入文件改动时,版本号自动更新~
  4. 原版英文书籍《Linux命令行》阅读记录5 | 使用命令
  5. C语言学习笔记---可变参数
  6. 腾讯用微信、QQ 把微视送上了 App Store 第一 | 畅言
  7. 2021-06-06滚动条de面板
  8. 在线Excel的前端组件、控件,实现web Excel
  9. 测试质量体系搭建--测试团队目标
  10. 暑期旅游超十亿人次,张家界成为大黑马,挤掉三亚西安排全国第三
  11. 两步实现安卓手机秒变网络摄像头
  12. Rasa课程、Rasa培训、Rasa面试、Rasa实战系列之 Response Selection
  13. 新品上市 | “电子表格软件”轻装上阵,企业报表用户的新选择
  14. BlueTooth: 蓝牙Profile的概念和常见种类
  15. SAP中导出物料评估类对应关系清单
  16. 加州大学圣克鲁兹分校计算机科学,加州大学圣克鲁兹分校排名
  17. 谈谈技术人的英语学习
  18. 关于值班表的前端显示
  19. 学阿里中台,80%的人只学到了皮毛!揭秘阿里中台的12个架构思维和原则
  20. 【CET4四级英语】【单词】单词的同义替换(1)

热门文章

  1. [zkaq靶场]FineCMS的存储型XSS
  2. com.android.phone已停止运行怎么解决方法,com.android.phone进程意外停止/已停止运行的原因及解决方法...
  3. win10需要修复计算机,超好用!Win10自带修复系统 隐藏太深
  4. 我是一个大器晚成的投资人
  5. hadoop完全分布式教程网页
  6. 对话赫拉利与李飞飞:人工智能影响人类的四大问题
  7. 概率论与数理统计 基本概念
  8. 国家电网车辆智能车载终端4G全网通T-BOX 、车联网OBD终端、4G TBOX终端
  9. phython学习资料
  10. c语言开发ios应用程序,马上着手开发iOS应用程序:三、应用开发基础