类加载器、类加载器的过程、类加载的分类、双亲委派模型

news2024/11/25 2:58:55

文章目录

  • 1.类加载器
    • 1.1类加载器
    • 1.2类加载的过程
    • 1.3类加载的分类
    • 1.4 双亲委派模型
    • 1.5 ClassLoader 中的两个方法

1.类加载器

1.1类加载器

  • 作用

    • 负责将.class文件(存储的物理文件)加载到内存中
      在这里插入图片描述

    1.2类加载的过程

  • 类加载时机

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

    • 1.加载

      • 通过包名 + 类名,获取这个类,准备用流进行传输
      • 将这个类加载到内存中
      • 加载完毕创建一个 class 对象
        在这里插入图片描述
    • 2.链接

      • 验证
        确保 Class 文件字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身安全(文件中的信息是否符合虚拟机规范有没有安全隐患)
        在这里插入图片描述

      • 准备
        负责为类的类变量(被 static 修饰的变量)分配内存,并设置默认初始化值(初始化静态变量)
        在这里插入图片描述

      • 解析
        将类的二进制数据流中的符号引用替换为直接引用(本类中如果用到了其他类,此时就需要找到对应的类)
        在这里插入图片描述

    • 3.初始化
      根据程序员通过程序制定的主观计划去初始化类变量和其他资源(静态变量赋值以及初始化其他资源)
      在这里插入图片描述

  • 小结

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

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.5 ClassLoader 中的两个方法

  • 方法介绍

方法名说明
public static ClassLoader getSystemClassLoader()获取系统类加载器
public InputStream getResourceAsStream(String name)加载某一个资源文件
  • 代码演示
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ClassLoaderDemo2 {
    public static void main(String[] args) throws IOException {
        // static ClassLoader getSystemClassLoader() 获取系统类加载器
        // InputStream getResourceAsStream(String name) 加载某一个文件
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();

        //利用加载器去加载一个指定的文件
        //参数:文件的路径
        //返回值:字节流。
        InputStream is = systemClassLoader.getResourceAsStream("prop.properties");
        Properties prop =new Properties();
        prop.load(is);//将本地文件中的数据加载到 prop集合中
        System.out.println(prop);
        is.close();
    }
}

在这里插入图片描述

  • 输出结果
    在这里插入图片描述

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

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

相关文章

【内网安全-通讯上线】通讯上线基础知识

目录 一、基础知识 1、关键词: 2、代理技术 3、IP隧道技术 4、使用场景 二、示例 1、不出网上线 1)理论: 2)示例: 三、代理技术 1、dome 2、第一步:网络通讯 3、第二步:控制上线 …

word插件grammerly,边写论文边修改语法

下载网址:报错信息 下载网址:Grammarly for MS Office | Grammarly 官网安装提示: Install Grammarly for all users by following these steps: Uninstall your current version of the Grammarly add-in via Control Panel > Program…

叶酸偶联壳聚糖载多西他赛纳米粒(FA-CTS/DTX)纳米粒

叶酸偶联壳聚糖载多西他赛纳米粒(FA-CTS/DTX)纳米粒 中文名称:叶酸偶联壳聚糖载多西他赛纳米粒纳米粒 英文名称:FA-CTS/DTX 纯度:95% 存储条件:-20C,避光,避湿 外观:固体或粘性液体 包装&#xf…

大学生网页作业成品——基于HTML网上书城项目的设计与实现

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

不带www的顶级域名跳转到www域名上

背景:百度收录有时候会收录不带www的顶级域名,这个时候如果不做处理就会导致域名权重分散,尤其是当本身域名权重不高的时候,更不容易让网站参加排名或者排名好一些.这个时候就需要进行301重定向的配置了,本次带来的是主要是通过伪静态文件进行301跳转的方法. 伪静态文件配置方…

苹果电脑数据库管理Navicat Premium中文

Navicat Premium中文是一款好用的数据库管理工具。将此工具连接数据库,可以从中看到各种数据库的详细信息。包括报错,等等。当然,你也可以通过他,登陆数据库,进行各种操作。Navicat Premium是一个可多重连线资料库的管…

易基因|NSUN2介导RNA m5C修饰促进食管鳞状细胞癌进展的表观调控机制 | 肿瘤研究

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 2021年8月3日,中山大学肿瘤防治中心华南肿瘤学国家重点实验室研究团队在《Oncogene》杂志发表了《NSUN2-mediated RNA 5-methylcytosine promotes esophageal squamous cell …

C盘容量不足,怎么增加c盘空间?看这5个方法

在电脑磁盘中,C盘属于系统磁盘,许多应用软件的默认安装路径都是C盘。随着时间的推移,C盘的可用空间会越来越小,系统会越来越卡,甚至影响电脑的运行效率。因此,我们必须采取行动来增加C盘空间,以…

创米数联创业板IPO被终止:曾拟募资6.44亿 小米是重要股东

雷递网 雷建平 12月13日上海创米数联智能科技发展股份有限公司(简称:“创米数联”)日前IPO被终止,其曾在2022年6月递交招股书,准备在深交所创业板上市。创米数联曾计划募资6.44亿元,其中,4.06亿…

Go项目实战:01-聊天室

实现一个聊天室(群): 功能分析: 1、上线下线2、聊天:其他人和自己都可以看到聊天消息3、查询当前的聊天室用户所有人的名字4、可以修改自己的名字5、超时潜水踢出机制 技术点分析: 1、socket tcp编程2、…

ADI Blackfin DSP处理器-BF533的开发详解51:图像处理专题-CMOS摄像头采集图像(含源码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 板卡上设计了一个摄像头接口,可以连接与板卡匹配的 ADSP-EDU-CMOS 子卡板。摄像头接口采用 20PIN 插针接入,将插…

基于android的二手车交易系统app-计算机毕业设计

项目介绍 该二手车信息软件采用JSP Tomcat MysqlAndroid开发环境开发,是一款展示二手车信息,并提供卖方联系方式,让买家更方便地找到合适的二手车主的软件,系统分为前端和后端,前端采用了安卓技术开发,在…

jfinal整合IJPay paypal支付

这里写目录标题环境准备1.注册paypal账户2.登录开发者中心3.创建沙箱账户4.在沙箱模式创建一个app,平台默认创建好了一个4.1填写信息4.2绑定某个沙箱账号4.3Client ID及Secret支付代码1.pom2.实例化配置3.支付订单3.1用sandbox的personal的账号登录,并支…

你说精通MySQL其实很菜jī(1):你不一定会的基本技巧或知识点(值得一看)

你说精通MySQL其实很菜jī(1):你不一定会的基本技巧或知识点(值得一看)《你说精通MySQL其实很菜jī》系列文章(持续更新)一、前言二、技巧或知识点汇总1、MySQL客户端(Client&#x…

HID设备的报告描述符

HID设备类定义文档中明确指出,一个报告描述符必须包含但不仅限于以下数据项: 输入(输出或特征) 指明了报告的类型,其中隐含了报告的传输方向以及报告数据所具有的数学特性。 用法(也可用“用法最小值与最大…

发现oracle10gSYSAUX空间没有了进行处理

今天用户反馈sap有些因为有问题,所以寻找一下原因: 1、用db02看空间情况 看这里好像空间是没有了,99%使用掉了 2、用toad看空间也是类型情况,所以确实这个表空间没有了 3、检查SYSAUX项目空间占比 SELECT occupant_name"…

Spring Boot 3.x微服务升级经历

前言 Spring Boot 3.0.0 GA版已经发布,好多人也开始尝试升级,有人测试升级后,启动速度确实快了不少,如下为网络截图,于是我也按捺不住的想尝试下。 历程 首先就是要把Spring Boot、Spring Cloud 相关的依赖升一下 …

用Python画一棵分形树

文章目录画一棵分形树加入随机量的分形树加入点缀的圣诞树画一棵分形树 分形树,就是用分形的逻辑去画一棵树,所谓分形,若从编程的角度去理解,其实就是简单规则的反复迭代。 例如,现在有一条线段,长为LLL&…

【微服务远程调用】基于RestTemplate发送HTTP请求实现微服务远程调用

本期目录1. 情景2. 远程调用方式分析3. 远程调用步骤3.1 注册 RestTemplate3.2 修改订单业务层3.3 测试4. 总结1. 情景 我编写的订单微服务查询订单时,无法跨越数据库查询订单所关联的用户 user 。因此下图中订单数据的 user 字段为 null 。 本节,我们…

【LSS: Lift, Splat, Shoot】代码的复现与详细解读

文章目录一、代码复现1.1 环境搭建1.2 数据集下载1.3 Evaluate a model1.4 Visualize Predictions1.5 Visualize Input/Output Data1.6 Train a model二、代码理解main.pyexplore.pydata.pymodels.pytools.pytrain.py原论文:https://arxiv.org/pdf/2008.05711v1.pdf…