千家信息网

怎么理解Java类加载器和类加载机制

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要讲解了"怎么理解Java类加载器和类加载机制",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么理解Java类加载器和类加载机制"吧!一 点
千家信息网最后更新 2026年11月01日怎么理解Java类加载器和类加载机制

这篇文章主要讲解了"怎么理解Java类加载器和类加载机制",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么理解Java类加载器和类加载机制"吧!

一 点睛

1 类加载器负责将.class文件(可能在磁盘上,也可能在网络上)加载到内存中,并为之生成对应的java.lang.Class对象。

2 当JVM启动时,会形成由三个类加载器组成的初始类加载器层次结构:

Bootstrap ClassLoader:根类加载器。

Extension ClassLoader:扩展类加载器。

System ClassLoader:系统类加载器。

3 JVM的类加载机制主要有如下三种机制:

全盘负责:所谓全盘负责,就是说当一个类加载器负责加载某个Class的时候,该Class所依赖的和引用的其他Class也将由该类加载器负责载入,除非显式使用另外一个类加载器来载入。

父类委托:所谓父类委托则是先让parent(父)类加载器试图加载该Class,只有在父类加载器无法加载该类时才尝试从自己的类路径中加载该类。

缓存机制:缓存机制将会保证所有被加载过的Class都会被缓存,当程序中需要使用某个Class时,类加载器先从缓存中搜寻该Class,只有当缓存中不存在该Class对象时,系统才会读取该类对应的二进制数据,并将其转换成Class对象,并存入cache。这就是为什么我们修改了Class后,程序必须重新启动JVM,程序所作的修改才会生效的原因。

二 实战

1 代码

import java.net.*;public class BootstrapTest{ public static void main(String[] args) { // 获取根类加载器所加载的全部URL数组 URL[] urls = sun.misc.Launcher. getBootstrapClassPath().getURLs(); // 遍历、输出根类加载器加载的全部URL for (int i = 0; i < urls.length; i++) { System.out.println(urls[i].toExternalForm()); } }}

2 运行

file:/D:/Program/Java/jdk1.8.0_162/jre/lib/resources.jarfile:/D:/Program/Java/jdk1.8.0_162/jre/lib/rt.jarfile:/D:/Program/Java/jdk1.8.0_162/jre/lib/sunrsasign.jarfile:/D:/Program/Java/jdk1.8.0_162/jre/lib/jsse.jarfile:/D:/Program/Java/jdk1.8.0_162/jre/lib/jce.jarfile:/D:/Program/Java/jdk1.8.0_162/jre/lib/charsets.jarfile:/D:/Program/Java/jdk1.8.0_162/jre/lib/jfr.jarfile:/D:/Program/Java/jdk1.8.0_162/jre/classes

三 实战

1 代码

import java.util.*;import java.net.*;import java.io.*;public class ClassLoaderPropTest{ public static void main(String[] args) throws IOException { // 获取系统类加载器 ClassLoader systemLoader = ClassLoader.getSystemClassLoader(); System.out.println("系统类加载器:" + systemLoader); /* 获取系统类加载器的加载路径--通常由CLASSPATH环境变量指定 如果操作系统没有指定CLASSPATH环境变量,默认以当前路径作为 系统类加载器的加载路径 */ Enumeration em1 = systemLoader.getResources(""); while(em1.hasMoreElements()) { System.out.println(em1.nextElement()); } // 获取系统类加载器的父类加载器:得到扩展类加载器 ClassLoader extensionLader = systemLoader.getParent(); System.out.println("扩展类加载器:" + extensionLader); System.out.println("扩展类加载器的加载路径:" + System.getProperty("java.ext.dirs")); System.out.println("扩展类加载器的parent: " + extensionLader.getParent()); }}

2 运行

系统类加载器:sun.misc.Launcher$AppClassLoader@18b4aac2file:/E:/Java/IDEA_Java/out/production/IDEA_Java/扩展类加载器:sun.misc.Launcher$ExtClassLoader@14ae5a5扩展类加载器的加载路径:D:\Program\Java\jdk1.8.0_162\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext扩展类加载器的parent: null

感谢各位的阅读,以上就是"怎么理解Java类加载器和类加载机制"的内容了,经过本文的学习后,相信大家对怎么理解Java类加载器和类加载机制这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

系统 机制 路径 缓存 对象 就是 程序 学习 代码 内容 变量 只有 实战 环境 委托 运行 操作系统 三个 中搜 二进制 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网金融监管科技数据 鸠鸠互联网科技 深圳天众互联网科技公司 蓝色互联网科技 须眉科技是互联网公司吗 随着互联网科技发展 以后互联网后是啥科技 受益于互联网科技的高速发展 互联网金融中的现代科技 宜昌元轩互联网科技有限公司 洛阳共同富裕互联网科技有限公司 为客找房互联网科技公司怎么样 合肥互联网科技公司公章图片 山东星卡互联网科技有限公司官网 产业互联网科技服务公司 互联网科技年终奖 抖集互联网科技技术咨询 科技互联网行业投资研究 互联网科技的前景 现代科技的标志之一的互联网 耶加雪菲 有格互联网科技 互联网科技博客 央行互联网金融科技公司 贵州叶脉互联网科技有限公司所属行业 移动互联网年度科技创新 互联网科技与大数据专业 易租星互联网科技有限公司 马化腾互联网科技教学 唐山双旺合互联网科技产业园
0