黑马程序员---类加载器

2023-11-17

  ------- android培训java培训、期待与您交流! ----------

 

简要介绍什么是类加载器和类加载器的作用

Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader,AppClassLoader
 
类加载器也是Java类,因为其他是java类的类加载器本身也要被类加载器加载,显然必须有第一个类加载器不是不是java类,这正是BootStrap。它是嵌套在java虚拟机内核里面的,Java虚拟机内核一启动,它就在里面了,它是用c++编写的。
 
Java虚拟机中的所有类装载器采用具有父子关系的树形结构进行组织,在实例化每个类装载器对象时,需要为其指定一个父级类装载器对象或者默认采用系统类装载器为其父级类加载。

Class类中的方法:

 ClassLoader getClassLoader()
          返回该类的类加载器。

ClassLoader类中的方法:

 ClassLoader getParent()
          返回委托的父类加载器。

package cn.itcast.day2;

public class ClassLoaderTest {

	public static void main(String[] args) {
		
		System.out.println(
				ClassLoaderTest.class.getClassLoader()
				.getClass().getName());//sun.misc.Launcher$AppClassLoader
		
		System.out.println(
				System.class.getClassLoader() ); //null,不代表没有类加载器,而代表它是一个特殊的类加载器BootStrap。
		
		//以下代码,验证 类加载器 的父子关系。
		ClassLoader loader = ClassLoaderTest.class.getClassLoader();//AppClassLoader
		while(loader!=null) {
			System.out.println(loader.getClass().getName());
			loader = loader.getParent();						
		}
		System.out.println(loader);
	}
}

类加载器 的 父子关系,运行结果:

sun.misc.Launcher$AppClassLoader
sun.misc.Launcher$ExtClassLoader
null  (代表:BootStrap)

类加载器之间的父子关系和管辖范围图:

我们将刚才写的那个类,右键 Export (以java的 jar 包的格式)导出到 jre/lib/ext/*.jar 文件夹下。

再运行程序,该类的类加载器变成了 ExtClassLoader。

此时的环境状态是classpath目录有ClassLoaderTest.classext/itcast.jar包中也有ClassLoaderTest.class

为什么由爸爸(ExtClassLoader)加载了,而没有被儿子(AppClassLoader)加载,这时候我们就需要了解类加载的具体过程和原理了。

类加载器的委托机制

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

黑马程序员---类加载器 的相关文章

随机推荐

  • 模拟电路设计(8)--- 耗尽型MOSFET

    上篇我们讲到增强型MOSFET的特点是 N沟道的建立是Ugs的贡献 没有Ugs gt Ut 导电沟道就无法建立 D S就不会有导通电流 这边我们要说的是另一种MOSFET 称为耗尽型MOSFET N沟道耗尽型MOSFET结构示意图 以N沟道
  • java并发编程笔记(三)--管程(二)

    习题 卖票 请改正 public class ExerciseSell public static void main String args 2000张票 TicketWindow ticketWindow new TicketWindo
  • Redis - WRONGTYPE Operation against a key holding the wrong kind of value

    用RedisTemplate把数据存入Redis key值为物料编码 value值为对应对象 但相同物料编码对应的对象不一定唯一故采用Set for int i 0 i lt retrospectiveBomSbomtList size i
  • 分布式系统的一致性级别划分及Zookeeper一致性级别分析

    最近在研究分布式系统的一些理论概念 例如关于分布式系统一致性的讨论 看了一些文章我有一些不解 大多数对分布式系统一致性的划分是将其分为三类 强一致性 顺序一致性以及弱一致性 强一致性 Strict Consistency 也称为 原子一致性
  • Vuex的五个核心属性

    Vuex的五个核心概念 本文参考自Vue文档 说的非常详细 建议看文档 Vuex是什么 VueX 是一个专门为 Vue js 应用设计的状态管理架构 统一管理和维护各个vue组件的可变化状态 你可以理解成 vue 组件里的某些 data V
  • svg格式的图片转化为 png 格式

    下载并使用插件插件 save svg as png import saveSvg from save svg as png let path url t new Date getTime const parser new DOMParser
  • (全网最详细)如何在docker里搭建mmdetection环境并封装成镜像

    目录 前言 1 理解docker 2 搭建过程 2 1 创建基础镜像 2 2 构建容器 2 3 进入容器 2 4 搭建环境 2 5 测试 2 6 提交 3 小结 前言 目的 由于一个AI比赛需要提交算法Docker 捣鼓好几天终于有点眉目
  • Vue.js快速入门 (cdn引入)

    文章目录 一 Vue基础 1 1 渐进式框架 1 2 第一个Vue程序 1 3 el 挂载点 1 4 data 数据对象 二 Vue 指令 2 1 v text 文本值 2 2 v html 标签元素 2 3 v on 绑定事件 2 4 v
  • 零基础入门网络安全必看的5本书籍(附书单pdf)

    作为一个Java转行网络安全的过来人 我深知自学时的种种不易 同时也经常有粉丝朋友问我 刚入门应该怎么学 有哪些书籍推荐等问题 今天我就把我自己的学习书单分享给大家 希望对大家有帮助 一 5本必读书籍 1 1 鸟哥的Linux私房菜 推荐理
  • Docker部署tomcat

    文章目录 1 下载Tomcat镜像 2 启动 3 进入Tomcat 1 下载Tomcat镜像 首先可以去官网查看想要下载的tomcat版本 https hub docker com tomcat 官方的使用 不推荐 官方文档解释 it 交互
  • Go1.21 速览:新内置函数 clear、min、max 和新标准库包 cmp!

    大家好 我是煎鱼 前面给大家分享了 Go1 21 正式不支持 macOS 10 13 和 10 14 的支持 吓得我赶紧把我的 2017 款的老爷机从 10 14 升成 13 4 感觉 mbp 已经变成了暖宝宝 今天给大家分享的是 Go 1
  • 自然辩证法(研究生)期末考试题库

    仅供参考 后果概不负责 第一讲 实际上就是科学与马克思主义哲学的纽带和桥梁 这就如同历史唯物主义是马克思主义哲学和各门社会科学的中间环节一样 A 社会学B 哲学C 科技与社会D 自然辩证法 答案 D 自然界 按照我们通常的理解 其内涵包括上
  • 【已解决】Hyperledger Fabric 2.3创建通道失败问题Channel creation failed

    简介 问题描述 在按照readthedocs教程进行超级账本框架 fabric区块链的学习过程中 到通道创建这一步一直失败 即无法成功运行 network sh up createChannel 出现的错误提示 直接去搜索这个segment
  • mc有无限火力的服务器ip,MC小游戏:起床战争-无限火力I(上)

    再次来到花雨庭 我径直走向起床战争 无限火力 这次陪同我的还有24 25和小9 钱猫 我 也来了 为什么把我说漏了 还有钱猫 钱猫 这还差不多 朝着无限火力的NPC点了一下 很快 就到了游戏大厅 25慌张地说道 你看这群人 要么是VIP 要
  • java实现将数据导出为word功能(文字,表格,图片的循环导出)

    1 配置文件的准备 1 导出功能实现所需要的pom文件
  • 高维空间最近邻逼近搜索算法评测

    高维空间最近邻逼近搜索算法评测 最近邻方法是机器学习中一个非常流行的方法 它的原理很容易理解 邻近的数据点是相似的数据点 更可能属于同一分类 然而 在高维空间中快速地应用最近邻方法 却是非常有挑战性的工作 全球最大的流媒体音乐服务商Spot
  • Intellij导入子项目时,maven列表子项目灰色不可用---解决方法

    导入子项目的module时 左侧project目录中有一个module图标右下角没有小蓝点 maven管理列表该module为灰色 表明未被管理 尝试几次后终于找到解决方案 贴一张调好过后的图 第一步 找到父项目 点击右键 选择Open M
  • 大话Stable-Diffusion-Webui-客制化主题(二)

    文章目录 前置知识 在gradio项目中使用客制化的主题 创建一个完整的Gradio主题 上传客制化主题至huggingface 笔者DIY的主题 接着 大话Stable Diffusion Webui 客制化主题 一 继续探讨下基于gra
  • 用python实现输出3位水仙花数

    3位水仙花数 是指一个三位整数 其各位数字的3次方和等于该数本身 例如 ABC是一个 3位水仙花数 则 A的3次方 B的3次方 C的3次方 ABC 请按照从小到大的顺序输出所有的3位水仙花数 请用 逗号 分隔输出结果 shuixianhua
  • 黑马程序员---类加载器

    android培训 java培训 期待与您交流 简要介绍什么是类加载器和类加载器的作用 Java虚拟机中可以安装多个类加载器 系统默认三个主要类加载器 每个类负责加载特定位置的类 BootStrap ExtClassLoader AppCl