类加载机制

2023-11-09

        类的加载的机制:主要从两个方面回答。我们自己写的java文件到最终的运行,它必须经过编译和类加载这两个阶段。

        编译的过程就是把.java文件编程成class文件;类加载过程 就是把.class文件加载到JVM内存中,装载完成后会得到一个class对象,我们就可以使用new关键来实例化这个对象。

        而类的加载过程需要涉及到类加载器,JVM在运行的时候会产生三个类加载器,组成了一个层级关系,每一个类加载器分别去加载不同作用范围的jar包。

        BootStrap ClassLoader、它主要负责java核心类库的加载,也就是%{JDK_HOME}\lib下面的一个rt.jar和resources.jar等。

        Extension ClassLoader主要负责%{JDK_HOME}\ext目录下的一个jar包和class文件;

        Application ClassLoader主要负责当前应用里面classpath下面的所有jar包和类文件,除了系统自己提供的类加载器之外,还可以通过ClassLoader类来实现自定义加载器去满足一些特殊的场景需求。

 

所谓的双亲委派机制:就是按照类加载器的层级关系,逐层进行委派(向上委派,向下加载)。比如说我们当我们需要加载一个class文件时候,我们会首先把这个class文件查询和加载委派给父加载器去执行,如果父加载器都无法加载,那么再尝试自己来加载这个class类。

这么设计的好处:

        第一个是安全性,因为这种层级关系实际上代表的是一种优先级,也就是说所有的类加载都需要优先给到BootStrap ClassLoader,那么对于核心类库中的一些类就没有办法被破坏,比如说自己写一个java.lang.String最终还是要交给启动类加载器再加上每个类加载器的本身的一个作用范围那么自己写的java.lang.String就没有办法去覆盖类库中的类。

第二个,我认为这种层级关系的设计可以避免重复加载,导致程序混乱的一些问题,因为如果父加载器已经加载过了,子类加载器就没有必要再去加载了。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类加载机制 的相关文章

随机推荐

  • Node.js开发——解决Cesium视角切换的异常

    最近在利用Cesium做开发时 版本是v25 发现一个bug 在它的SandCastle中的任何一个例子 如果用的是Chrome浏览器 在2D视图和2 5D视图之间多次切换 会报一个错 换成firefox浏览器就没问题 An error o
  • 区块链之Solidity类型

    Solidity语言 IDE https remix ethereum org 合约文件结构 版本申明 import 合约 状态变量 函数 结构类型 事件 函数修改器 代码注释 结构举例 表示从0 4 0版本到0 5 0版本 pragma
  • Qt 编程点滴4

    编译win32 中的 dll工程配置方法 以skypebackend为例 因为工程中的代码全是标准C 的代码 所以编译方式跟Qt有点不一样 Project properties Project settings页中的 This is a c
  • 解决java.net.SocketException: Invalid argument or cannot assign requested address

    今天发现facebook app读取facebook上的api时发生以下错误 java net SocketException Invalid argument or cannot assign requested address 解法 l
  • helm下

    讲师 李振良 官方网站 http www ctnrs com 第三章 Helm应用包管理器 下 说明 强烈建议学习课堂视频 更多细节都在里面 本文档为内部学员资料 请不要随意转发 3 6 Chart模板 Helm最核心的就是模板 即模板化的
  • xci转nsp工具_再谈xci、nsz、nsp

    每次群里有人问到进相册的homebrew为什么装不了补丁 或者说刚拉进去的文件为什么读取不到 老白之前推荐的aw 适用大气层 后期有改版aw适用TX tinleaf 适用于TX aw和tinleaf可以直接安装xci nsp nsz 安装n
  • 【爬虫】selenium+webdrive抓取淘宝商品评价

    爬虫 selenium webdrive抓取淘宝商品评价 爬虫小白入门 声明 本人只是处于突如其来的兴趣学习一点点 水平实在不高 但在这个过程中也或多或少地解决了一些问题 所以对同为小白的朋友们或许有用 但还请大神们不要笑我 动手前必备的知
  • DispatcherServlet工作原理简介说明

    转自 DispatcherServlet工作原理简介说明 下文笔者将讲述DispatcherServlet的工作流程 如下所示 当DispatcherServlet接到请求时 他先回查找适当的处理程序来处理请求 DispatcherServ
  • C语言中signal函数简介及使用

    signal h是C标准函数库中的信号处理部分 定义了程序执行时如何处理不同的信号 信号用作进程间通信 报告异常行为 如除零 用户的一些按键组合 如同时按下Ctrl与C键 产生信号SIGINT C 中的对应头文件是csignal C语言标准
  • Jenkins Android项目编译配置(完整版)

    Jenkins编译项目配置 环境要求 Jenkins准备 安装 启动 初始化 全局配置 全局工具 Global Tool Configuration 凭据 项目示例 General 源码管理 构建触发器 构建环境 构建 构建后操作 需要的插
  • C++ 函数覆盖

    C 函数覆盖 在派生类和基类中都定义了相同的函数 如果使用派生类的对象调用这个函数 派生类的函数就会被执行 这在 C 中称为函数覆盖 派生类中的函数覆盖基类中的函数 示例 1 C 函数覆盖 include
  • cblas_sgemm和cublasSgemm参数详解

    机器学习最核心的底层运算肯定是矩阵乘法无疑了 为了让矩阵乘法执行更快 大家也是绞尽脑汁 从算法层面 stranssen算法将矩阵乘法复杂度由 O n 3 O n 3 O n3 降
  • SSH方式连接Git及报错处理:RPC failed; result=22, HTTP code = 502

    Git作为常用的分布式版本控制系统 当前十分流行 我们已经介绍过有关Git进行版本控制的内容 但在实际使用Git过程中还是会遇到各种问题 今天就针对一个Git报错进行处理 通过HTTPS的git地址 clone到本地 初始一个项目包 add
  • Android Studio开发环境

    Android Studio 开发环境 React Native创建项目需要 java 开发环境 gt jdk 只需配置环境变量 gradle 只需配置环境变量 Android Studio 安装Android Studio Android
  • 固态硬盘启动计算机时间,装了固态硬盘开机还是慢,其实是忽略了这些...

    原标题 装了固态硬盘开机还是慢 其实是忽略了这些 你的电脑开机速度打败了全国百分之多少的用户 每天是否需要等上一段时间电脑才会开机 如果是这样 有人会说你该换个固态硬盘了 温馨提醒哦 这几个问题不解决 换了也没用 一 自检太慢 可以在BIO
  • 聊聊Java中的异常及处理

    前言 在编程中异常报错是不可避免的 特别是在学习某个语言初期 看到异常报错就抓耳挠腮 常常开玩笑说编程1分钟 改bug1小时 今天就让我们来看看什么是异常和怎么合理的处理异常吧 异常与error介绍 下面还是先让我们来看一下基本概念吧 异常
  • * \r \r\n \t的区别,是什么意思

    n 软回车 在Windows 中表示换行且回到下一行的最开始位置 相当于Mac OS 里的 r 的效果 在Linux unix 中只表示换行 但不会回到下一行的开始位置 r 软空格 在Linux unix 中表示返回到当行的最开始位置 在M
  • 【保姆式教程】用PowerDesigner导出数据库表结构为Word/Excel表格

    使用PowerDesigner将表结构导出到word表格 一 PowerDesigner的下载安装 已安装的跳过 PowerDesigner下载地址 后面只要next gt gt next gt gt finish 将track目录中的文件
  • 信奥赛和少儿编程的区别

    信奥赛和少儿编程的区别 现在的家长在培养孩子的学习的时候 可以说是非常的用心 他们会给孩子选择一些能够提升孩子能力的课程 就拿现在很多的家长想要孩子去学习少儿编程的课程来说 他们对于少儿编程和信息学奥赛的区别并不是很清楚 今天我们就一起来了
  • 类加载机制

    类的加载的机制 主要从两个方面回答 我们自己写的java文件到最终的运行 它必须经过编译和类加载这两个阶段 编译的过程就是把 java文件编程成class文件 类加载过程 就是把 class文件加载到JVM内存中 装载完成后会得到一个cla