使用自定义类加载器打破双亲委派机制实现自定义String类

简介: 使用自定义类加载器打破双亲委派机制实现自定义String类

今天我和大家如何用自定义加载器打破双亲委派机制。

在介绍双亲委派机制前,我先来聊聊Java里面有几种类加载器。

  • 引导类加载器:Bootstrap classloader
  • 扩展类加载器:ExtClassLoader
  • 应用程序类加载器:AppClassLoader
  • 自定义加载器:MyClassLoader(这个名字自定义的)

接下来我们来介绍下什么是双亲委派机制,如下图所示:

image.png

在这里类加载其实就是个双亲委派机制,比如加载某个类时会先委托父加载器寻找目标类,找不到再委托上层父加载器加载,当所有父加载器在自己的加载路径下都找不到目标类的话就会在自己的类加载路径中查找并且载入目标类。

双亲委派机制的本质就是,加载类时先从父加载器中加载,父加载器没有,再由子加载器中加载。

为什么要设计双亲委派机制?

  • 沙箱安全机制:如果有人想替换系统级别的类:String.java是不会被加载的,这样便可以防止核心API库被随意篡改。
  • 避免类的重复加载:当父加载器已经加载了该类时,就没有必要子加载器再加载一次,保证被加载类的唯一性。

下面我们来通过自定义加载器来打破这种双亲委派机制,并且我们自定义一个String类,让它加载到JVM中运行起来。

image.png

自定义类加载器

image.png

自定义String类

image.png

在目标文文件夹里使用javac 指令将String.java 生成String.class字节码文件。

image.png

字节码文件已生成

image.png

运行自定义类加载器

image.png

运行结果

运行结果

目录
相关文章
|
1月前
|
Java 编译器 ice
【Java开发指南 | 第十五篇】Java Character 类、String 类
【Java开发指南 | 第十五篇】Java Character 类、String 类
36 1
|
22天前
|
Java 安全 索引
滚雪球学Java(48):面向对象编程中的StringBuffer类详解
【6月更文挑战第2天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
30 5
滚雪球学Java(48):面向对象编程中的StringBuffer类详解
|
23天前
|
存储 Java 测试技术
滚雪球学Java(47):String类教程:如何在Java中使用字符串操作
【6月更文挑战第1天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
21 2
滚雪球学Java(47):String类教程:如何在Java中使用字符串操作
|
3天前
|
Java API 索引
java中String类常用API
java中String类常用API
|
18天前
|
C语言 C++
C++初阶学习第六弹——探索STL奥秘(一)——标准库中的string类
C++初阶学习第六弹——探索STL奥秘(一)——标准库中的string类
16 0
|
21天前
|
算法 Linux C语言
7.学习STL和string类:版本、组件、构造、操作及应用
7.学习STL和string类:版本、组件、构造、操作及应用
|
2天前
|
存储 安全 API
初识String类和String类的拓展
初识String类和String类的拓展
|
4天前
|
安全 Java
String类详解
String类详解
11 0
|
11天前
|
C++ 容器
【C++语言】String 类关键函数实现,手搓一个简单字符串类!
【C++语言】String 类关键函数实现,手搓一个简单字符串类!
|
11天前
|
C++ 容器 存储
【C++语言】想学STL,先细细拿捏string类,万字详解string类 (内附精美思维导图)
【C++语言】想学STL,先细细拿捏string类,万字详解string类 (内附精美思维导图)