系列文章目录


文章目录


前言

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
在这里插入图片描述


概述

Java程序在运行的时候,JVM通过类加载机制(ClassLoader)把class文件加载到内存中,只有class文件被载入内存,才能被其他class引用,使程序正确运行起来.
在这里插入图片描述
ClassLoader的分类

Java中的ClassLoader有三种:Bootstrap ClassLoader 、Extension ClassLoader、App ClassLoader。

  1. Bootstrap ClassLoader

由C++写的,由JVM启动.启动类加载器,负责加载java基础类,对应的文件是%JRE_HOME/lib/ 目录下的rt.jar、resources.jar、charsets.jar和class等

2.Extension ClassLoader

Java类,继承自URLClassLoader 扩展类加载器,对应的文件是 %JRE_HOME/lib/ext 目录下的jar和class等

3.App ClassLoader

Java类,继承自URLClassLoader 系统类加载器,对应的文件是应用程序classpath目录下的所有jar和class等

三、ClassLoader的加载机制

Java的加载机制是双亲委派机制来加载类,

为什么要使用这种方式?这个是为了保证 如果加载的类是一个系统类,那么会优先由Bootstrap ClassLoader 、Extension ClassLoader先去加载,而不是使用我们自定义的ClassLoader去加载,保证系统的安全!

这三种类加载器存在父子关系,App ClassLoader的父类加载器是Extension ClassLoader,Extension ClassLoader的父类加载器是Bootstrap ClassLoader,要注意的一点是,这里的父子并不是继承关系。

ClassLoader双亲委派机制

当AppClassLoader加载class时 不会自己去尝试加载这个类 而把类委派给父类加载器ExtClassLoader加载。

当ExtClassLoader加载class时 不会自己去尝试加载这个类 而把类委派给父类加载器BootStrapClassLoader加载。

如BootStrapClassLoader加载失败(如在$JAVA_HOME/jre/lib中未找到该class) 会使用ExtClassLoader加载。

若ExtClassLoader加载失败 会使用AppClassLoader加载 如AppClassLoader加载失败 则抛出异常ClassNotFoundException。

四、自定义ClassLoader

为什么要自定义ClassLoader?

因为系统的ClassLoader只会加载指定目录下的class文件,如果你想加载自己的class文件,那么就可以自定义一个ClassLoader。

而且我们可以根据自己的需求,对class文件进行加密和解密。

这类似于软件定制了一个插件,只要插件实现了指定的方法,系统就可以通过反射调来调用该方法,从而实现额外特定功能。

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐