Java基础-类加载器

news2024/11/18 17:38:45

写在前面的话:

基础加强包含了:

反射,动态代理,类加载器,xml,注解,日志,单元测试等知识点

其中最难的是反射和动态代理,其他知识点都非常简单

由于B站P数限制,xml,注解等知识点,阿玮写了详细文档供大家学习

1.类加载器

1.1类加载器

  • 作用

    负责将.class文件(存储的物理文件)加载在到内存中

在这里插入图片描述

1.2类加载的完整过程

  • 类加载时机

    简单理解:字节码文件什么时候会被加载到内存中?

    有以下的几种情况:

    • 创建类的实例(对象)
    • 调用类的类方法
    • 访问类或者接口的类变量,或者为该类变量赋值
    • 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
    • 初始化某个类的子类
    • 直接使用java.exe命令来运行某个主类

    总结而言:用到了就加载,不用不加载

  • 类加载过程

    1. 加载

      • 通过包名 + 类名,获取这个类,准备用流进行传输
      • 在这个类加载到内存中
      • 加载完毕创建一个class对象

在这里插入图片描述

  1. 链接

    • 验证

      确保Class文件字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身安全

      (文件中的信息是否符合虚拟机规范有没有安全隐患)

    在这里插入图片描述

    • 准备

      负责为类的类变量(被static修饰的变量)分配内存,并设置默认初始化值

      (初始化静态变量)

在这里插入图片描述

 + 解析

   将类的二进制数据流中的符号引用替换为直接引用

   (本类中如果用到了其他类,此时就需要找到对应的类)

在这里插入图片描述

  1. 初始化

    根据程序员通过程序制定的主观计划去初始化类变量和其他资源

    (静态变量赋值以及初始化其他资源)
    在这里插入图片描述

  • 小结

    • 当一个类被使用的时候,才会加载到内存
    • 类加载的过程: 加载、验证、准备、解析、初始化

1.3类加载的分类

  • 分类

    • Bootstrap class loader:虚拟机的内置类加载器,通常表示为null ,并且没有父null
    • Platform class loader:平台类加载器,负责加载JDK中一些特殊的模块
    • System class loader:系统类加载器,负责加载用户类路径上所指定的类库
  • 类加载器的继承关系

    • System的父加载器为Platform
    • Platform的父加载器为Bootstrap
  • 代码演示

    public class ClassLoaderDemo1 {
        public static void main(String[] args) {
            //获取系统类加载器
            ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
    
            //获取系统类加载器的父加载器 --- 平台类加载器
            ClassLoader classLoader1 = systemClassLoader.getParent();
    
            //获取平台类加载器的父加载器 --- 启动类加载器
            ClassLoader classLoader2 = classLoader1.getParent();
    
            System.out.println("系统类加载器" + systemClassLoader);
            System.out.println("平台类加载器" + classLoader1);
            System.out.println("启动类加载器" + classLoader2);
    
        }
    }
    

1.4双亲委派模型

  • 介绍

    如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式

在这里插入图片描述

1.5ClassLoader 中的两个方法

  • 方法介绍

    方法名说明
    public static ClassLoader getSystemClassLoader()获取系统类加载器
    public InputStream getResourceAsStream(String name)加载某一个资源文件
  • 示例代码

    public class ClassLoaderDemo2 {
        public static void main(String[] args) throws IOException {
            //static ClassLoader getSystemClassLoader() 获取系统类加载器
            //InputStream getResourceAsStream(String name)  加载某一个资源文件
    
            //获取系统类加载器
            ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
    
            //利用加载器去加载一个指定的文件
            //参数:文件的路径(放在src的根目录下,默认去那里加载)
            //返回值:字节流。
            InputStream is = systemClassLoader.getResourceAsStream("prop.properties");
    
            Properties prop = new Properties();
            prop.load(is);
    
            System.out.println(prop);
    
            is.close();
        }
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/353065.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

交互式前端开发最好用的WebGL框架

JavaScript是创建Web最有用的编程语言之一,尤其是在WebGL库的支持下。有了WebGL,可以很方便地使用 HTML5 Canvas 元素动态生成图形。因此,设计师和开发人员很容易创建流畅的2D和3D效果。WebGL是JavaScript API或基于OpenGL的库,它…

CD20靶向药物|适应症|市场销售-上市药品前景分析

CD20是靶向治疗的第一个靶点,是B细胞淋巴瘤的现代治疗药物。CD20作为治疗剂的使用被认为是方便的,原因有二。首先,在 CD20 阳性肿瘤的情况下,这种受体大量存在于 B 淋巴细胞表面——每个细胞大约有十万个分子。其次,干…

火山引擎入选《2022 爱分析 · DataOps 厂商全景报告》,旗下 DataLeap 产品能力获认可

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 2 月 9 日,国内领先的数字化市场研究与咨询机构爱分析发布了《2022 爱分析DataOps 厂商全景报告》(以下简称报告),报…

java程序,springboot程序 找不到主类,找不到符号解决思路

文章目录问题解决方案一.可以尝试clean掉maven依赖,然后重新启动二.右键工程,选择maven然后重新加载工程,接着再启动试试三.删掉工程中的services.iml文件,重新配置后接着再启动试试四. 终极方案清除idea缓存,重启idea…

Rust之错误处理(二):带结果信息的可恢复错误

开发环境 Windows 10Rust 1.67.1VS Code 1.75.1项目工程 这里继续沿用上次工程rust-demo 带结果信息的可恢复错误 大多数错误并没有严重到需要程序完全停止的程度。有时,当一个函数失败时,它的原因是你可以很容易地解释和应对的。例如,如…

LearnOpenGL - 如何理解 VAO 与 VBO 之间的关系

系列文章目录 LearnOpenGL 笔记 - 入门 01 OpenGLLearnOpenGL 笔记 - 入门 02 创建窗口LearnOpenGL 笔记 - 入门 03 你好,窗口LearnOpenGL 笔记 - 入门 04 你好,三角形 文章目录系列文章目录1. 前言2. 渲染管线的入口 - 顶点着色器2.1 顶点着色器处理过…

Day891.一主多从的切换正确性 -MySQL实战

一主多从的切换正确性 Hi,我是阿昌,今天学习记录的是关于一主多从的切换正确性的内容。 在切换任务的时候,要先主动跳过这些错误,通过主动跳过一个事务或者直接设置跳过指定的错误,用GTID解决找同步位点的问题 大多…

oracle查找各PDB密码过期账户

连接oracle的时候,又报 ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程序 的错误。这种现象之前遇到不少,猜测可能又是某个sde账号密码过期或快过期,导致arcgis不停地连数据库,因而连接耗尽了。详见拙作&#xff1a…

电脑c盘满了怎么清理,c盘空间清理

电脑c盘满了怎么清理?电脑C盘满了可能是因为您的操作系统、程序文件、下载文件、临时文件、垃圾文件等占用了太多的存储空间。所以,我们就需要进行一些操作和清理。 一.清理电脑C盘的方法 清理临时文件和垃圾文件。在Windows上,您可以使用系…

windows10 安装DOSbox_32 debug.exe

windows10 安装DOSbox_32 debug.exe1.下载2. 安装DOSBox0.74-3-win32-installer.exe3. 配置DOSBox3. 启动DOSBox.exe4. 测试执行debug命令1.下载 DOSBox0.74-3-win32-installer.exe安装包debug.exe 2. 安装DOSBox0.74-3-win32-installer.exe 解压 双击DOSBox0.74-3-win32-insta…

QT+OPenGL模型加载 - Assimp

QTOPenGL模型加载 - Assimp 本篇完整工程见gitee:QtOpenGL 对应点的tag,由turbolove提供技术支持,您可以关注博主或者私信博主 模型加载 先来张图: 我们不大可能手工定义房子、汽车或者人形角色这种复杂形状所有的顶点、法线和纹理坐标。我…

【surfaceflinger源码分析】surface与surfaceflinger之间的关系

本篇文章带着以下问题继续分析surfaceflinger的源码: 什么是surface ? surface与图形数据之间是什么关系?surface和surfaceflinger之间是什么关系? Surface定义 先看看Surface这个类的定义,主要是定义了很多与GraphicBuffer相关的操作。 …

k8s(存储)数据卷与数据持久卷

为什么需要数据卷? 容器中的文件在磁盘上是临时存放的,这给容器中运行比较重要的应用程序带来一些问题问题1:当容器升级或者崩溃时,kubelet会重建容器,容器内文件会丢失问题2:一个Pod中运行多个容器并需要共…

创邻科技荣获人行旗下《金融电子化》年度大奖

近日,创邻科技收到由中国人民银行旗下《金融电子化》杂志社寄来的奖牌。 在《金融电子化》杂志社主办的第十三届金融科技应用创新奖中,创邻科技凭借“原生分布式图数据库Galaxybase解决方案”,从近400个参报案例中脱颖而出,荣获“…

Linux下zabbix_proxy实施部署

简介 zabbix proxy 可以代替 zabbix server 收集性能和可用性数据,然后把数据汇报给 zabbix server,并且在一定程度上分担了zabbix server 的压力. zabbix-agent可以指向多个proxy或者server zabbix-proxy不能指向多个server zabbix proxy 使用场景: 1,监控远程区…

【React全家桶】reac组件通信

🎞️🎞️🎞️ 博主主页: 糖 -O- 👉👉👉 react专栏:react全家桶 🌹🌹🌹希望各位博主多多支持!!&a…

自媒体市场规模由2015年的296亿元增涨至2021年的2500亿元

自媒体,又称“个人媒体”,是指大众化、自主化的传播者以图文、音频或视频内容等各类形式向公众发布信息内容。随着5G时代的来临和智能设备的性能逐渐提高,网络基础环境得到很大的提升,自媒体开始了新的发展…

QT的下载和安装

这里介绍的是QT官方方式下载,每次都让我很糊涂,就记载一下。先是下载QT online installerhttps://www.qt.io/download 在下方有Go Open Sourcehttps://www.qt.io/download-open-source 在下方有Download the Qt Online installerhttps://www.qt.io/downl…

C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)

要做SEO的肯定绕不开站点地图sitemap.xml。这玩意其实不难我也在搞写下来备忘一下也给新人指指路。 我先把代码放出来备忘下 #region CreateSiteMapXml/// <summary>/// /// </summary>/// <returns></returns>[Route("/art/CreateSiteMapXml&qu…

Windows下安装启动nginx.exe报错

Windows下安装启动nginx.exe报错 前言&#xff1a; 问题1&#xff1a; 在安装使用nginx服务器时遇到最大的问题是windows下命令行输入start nginx后&#xff0c;或者双击nginx.exe&#xff0c;一闪而过&#xff0c;启动不了&#xff0c;怀疑是以下几个方面的问题&#xff0c;…