首页 > 其他分享 >使用自定义类加载器打破双亲委派机制实现自定义String类

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

时间:2022-12-07 11:06:45浏览次数:42  
标签:委派 String 自定义 双亲 机制 加载


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

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

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

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

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

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

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

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

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

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

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

 自定义类加载器

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

 自定义String类

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

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

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

 字节码文件已生成

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

 运行自定义类加载器

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

 运行结果

就这样我们使用自定义的类加载器实现了自定String类的运行。

标签:委派,String,自定义,双亲,机制,加载
From: https://blog.51cto.com/u_15903793/5918246

相关文章

  • 随笔(三)『SpringBoot自定义异常类』
    1、定义异常类,继承RuntimeExceptionpackagecom.baihua.common.exception;importlombok.Data;/***自定义异常*/@DatapublicclassMyExceptionextendsRunti......
  • String类常用方法
    String类概述概述java.lang.String类代表字符串。Java程序中所有的字符串文字(例如"abc")都可以被看作是实现此类的实例。类String中包括用于检查各个字符串的方法,比如......
  • gym——1自定义Gym环境并注册
    gym1——自定义Gym环境并注册目录gym1——自定义Gym环境并注册感谢开始Step0新建文件夹Step1:新建环境文件xxEnv.pyStep2:在env下的__init__.py下注册**Step3**......
  • Day33:String类及其常用方法详解
    String类1.1String类概述Java中字符串属于对象,String类用于创建和操作字符串。最简单的字符串创建:直接通过String创建Stringstr="工地佬";利用String构造器创建字......
  • 【requirejs】requirejs使用layui,layui样式无法正常加载
    【requirejs】requirejs使用layui,layui样式无法正常加载 requirejs里使用layui,会有3个css文件无法正常加载错误提示GET http://127.0.0.1:8080/css/modules/lay......
  • go type string的用法
    packagemainimport"fmt"typeDDstringconst(CDD="dd"DDD="cc")func(DD)JoinString()DD{returnC+D}funcmain(){C.JoinString()D.JoinSt......
  • 自定义RBAC(2)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 上一次把DAC、MAC、PBAC这三个都一口气介绍完了,本想一口气把RBAC也说完。想了想,饭还是要一口口吃,一次吃太多会消化不良,......
  • 自定义RBAC(2)
    您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~上一次把DAC、MAC、PBAC这三个都一口气介绍完了,本想一口气把RBAC也说完。想了想,饭还是要一口口吃,一次吃太多会消化不良,所......
  • 1796.second-largest-digit-in-a-string 字符串中第二大的数字
    问题描述1796.字符串中第二大的数字解题思路遍历就好了代码classSolution{public:intsecondHighest(strings){intfirst=-1;intseco......
  • pytorch 使用DataParallel 单机多卡和单卡保存和加载模型的正确方法
    pytorch使用DataParallel单机多卡和单卡保存和加载模型的正确方法https://zhuanlan.zhihu.com/p/432698650 设置python环境PYTHONPATHhttps://blog.csdn.net/a58635......