当前位置: 首页 > news >正文

【Java小知识点】类加载器的区别

🎄欢迎来到@边境矢梦°的csdn博文🎄

🎄本文主要梳理Java类加载器的区别🎄
🌈我是边境矢梦°,一个正在为秋招和算法竞赛做准备的学生🌈
🎆喜欢的朋友可以关注一下🫰🫰🫰,下次更新不迷路🎆

Ps: 月亮越亮说明知识点越重要 (重要性或者难度越大)🌑🌒🌓🌔🌕  

在Java中,类加载器(Class Loader)根据其加载类的来源和工作方式可以分为不同的分类。主要的类加载器分类如下:

  1. 启动类加载器(Bootstrap Class Loader)

    • 启动类加载器是Java虚拟机的一部分,它负责加载Java平台核心库(Java API的一部分,如java.langjava.util等)。
    • 它是虚拟机本身的一部分,通常由C++编写,不是一个Java对象,也不继承java.lang.ClassLoader
  2. 扩展类加载器(Extension Class Loader)

    • 扩展类加载器负责加载Java的扩展库(Java标准库之外的一些功能,位于jre/lib/ext目录下)。
    • 通常使用Java编写,是标准的ClassLoader的子类。
  3. 应用程序类加载器(Application Class Loader)

    • 应用程序类加载器是最常用的加载器,负责加载应用程序的类,包括应用程序自身的类和第三方类库。
    • 通常是系统类加载器的子类,由Java编写。
  4. 自定义类加载器

    • 开发者可以创建自定义类加载器,以实现特定的需求,例如从网络加载类、加密类文件等。
    • 自定义类加载器需要继承java.lang.ClassLoader类,并覆盖其中的方法,例如findClassloadClass

另外,还可以根据加载类的顺序将类加载器分为以下三个主要类别:

  1. 双亲委派模型

    • Java类加载器遵循双亲委派模型,即每个类加载器在尝试加载一个类之前,会先委派给其父加载器。这种模型有助于确保类加载的一致性和安全性。
    • 如果父加载器找不到类,子加载器才会尝试加载。这意味着一些核心库类由启动类加载器加载,而应用程序类由应用程序类加载器加载。
  2. 扩展类加载器和应用程序类加载器

    • 扩展类加载器和应用程序类加载器通常是系统类加载器的子类,它们负责加载Java类库和应用程序的类。
    • 这两个加载器通常是自定义类加载器的父加载器,因此开发者可以扩展它们以实现自定义加载行为。
  3. 自定义类加载器

    • 自定义类加载器允许开发者根据需要实现特定的加载行为,可以加载网络上的类、加密的类文件等。
    • 自定义类加载器通常不是双亲委派模型中的一部分,开发者需要自行实现加载逻辑。

这些类加载器的分类和加载机制在Java应用程序的类加载过程中起到重要的作用,确保类能够正确加载和协同工作。

http://www.lryc.cn/news/204075.html

相关文章:

  • 分布式微服务技术栈-SpringCloud<Eureka,Ribbon,nacos>
  • Unity解决:导出AndroidStudio工程 出现如下报错的解决方法
  • Mac电脑怎么在Dock窗口预览,Dock窗口预览工具DockView功能介绍
  • Hadoop3教程(三十):(生产调优篇)纠删码
  • 用nodejs爬虫台湾痞客邦相册
  • 物联网_01_物理设备的网络接入
  • AD9371 官方例程之 tx_jesd 与 xcvr接口映射
  • UserWarning: CUDA initialization: CUDA unknown error
  • C算法:使用选择排序实现从(大到小/从小到大)排序数组,且元素交换不可使用第三变量。
  • 用mysql客户端操作时,一直提示 Lost connection to MySQL server during query
  • KubeSphere一键安装部署K8S集群(单master节点)-亲测过
  • vue3 element-plus 组件table表格 勾选框回显(初始化默认回显)完整静态代码
  • Redis --- 安装教程
  • 代码阅读:LanGCN
  • 基于Java的校园餐厅订餐管理系统设计与实现(源码+lw+部署文档+讲解等)
  • 使用C#和Flurl.Http库的下载器程序
  • 面试经典150题——Day19
  • TP6首页加载报错 Call to a member function run() on null
  • 洗车小程序源码:10个必备功能,提升洗车体验
  • macOS telnet替代方式
  • 【leetcode】独特的电子邮件地址
  • 解密Java中神奇的Synchronized关键字
  • 微信删除的好友还能找回来吗?盘点5种超实用的方法!
  • Nmap 常用命令汇总
  • 谷歌浏览器最新版和浏览器驱动下载地址
  • [游戏开发][Unity]Unity运行时加载不在BuildSetting里的场景
  • flutter开发实战-hero动画简单实现
  • Spring Boot + EasyUI 创建第一个项目(一)
  • 短视频矩阵系统源码/技术应用搭建
  • 硬核子牙:我准备写一本《带你手写64位多核操作系统》的书!