热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

类的加载器ClassLoader

先说明类的加载过程:当程序主动使用某个类时,如果该类还未被加载到内存中,则系统会通过如下三个步骤来对该类进行初始化:而关于ClassLoader:类加载器是用来把类(class)装
先说明类的加载过程:
当程序主动使用某个类时,如果该类还未被加载到内存中,则系统会通过如下三个步骤来对该类进行初始化:

技术分享
 
技术分享

而关于ClassLoader:

类加载器是用来把类(class)装载进内存的。JVM 规范定义了两种类型的类加载器:启动类加载器(bootstrap)和用户自定义加载器(user-defined class loader)。 JVM在运行时会产生3个类加载器组成的初始化加载器层次结构 ,如下图所示:


技术分享

举例如下:

  1. public class TestClassLoader {
  2. public static void main(String[] args) throws ClassNotFoundException {
  3. ClassLoader classLoader1 = ClassLoader.getSystemClassLoader();// 获取系统类加载器
  4. System.out.println(classLoader1);// sun.misc.Launcher$AppClassLoader@18b4aac2
  5. ClassLoader classLoader2 = classLoader1.getParent();// 获取扩展类加载器
  6. System.out.println(classLoader2);// sun.misc.Launcher$ExtClassLoader@dcf3e99
  7. ClassLoader classLoader3 = classLoader2.getParent();// 尝试获取引导类加载器
  8. System.out.println(classLoader3);// null
  9. ClassLoader classLoader4 = String.class.getClassLoader();// 核心类库使用引导类加载器
  10. System.out.println(classLoader4);// null
  11. ClassLoader classLoader5 = com.cdf.reflection.Person.class.getClassLoader();// 自建类使用系统类加载器
  12. System.out.println(classLoader5);// sun.misc.Launcher$AppClassLoader@18b4aac2
  13. }
  14. }

需要说明的是,常用类加载器来获取当前包下的文件:
技术分享

类的加载器 ClassLoader


推荐阅读
author-avatar
vm经典全屏
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有