在之前已经对类加载器做了不少实验了,这次主要是来分析一下ClassLoader的源码,当然主要是先从理解官方给它的注释开始,为之后自定义类加载器打好坚石的基础,下面开始:

而从类的层次结构来看也能感受到,如下:

其中该类的javadoc篇幅比较长,但是这文档是最据有权威性的,逐字逐句的去阅读它有助于咱们对它有一个精准的认识,所以下面耐着性子开阅读之旅,在阅读前需要介绍一个IntelliJ IDEA的一个进入Document的模式的方法,对于类中的注释其实有一些跳转之类的影响咱们阅读,如下:

而对于IDE来说有一种专门针对这个注释而转换成的文档阅读起来会比较舒服,其快捷键的设置在这:

将光标定位到要读的javadoc处,然后按相印的快捷键既可弹出一个Document的弹窗,如下:

好~~下面正式开始阅读:

给定了一个类的"binary name",那什么叫“binary name”呢?这是一个链接文字,点击则可以链到它的具体解释,在继续分析之前先来对它有一个初步的了解:

好~~再回过头来继续阅读:

那为什么“locate or generate”这两种方式呢?locate是指直接能定位到的类,比如咱们使用JDK系统的类比如java.lang.String,是直接能定位到的;generate是指在运行期生成的,典型的是动态代理,在编译期是找不到的。

这就是典型在日常开发中使用到的嘛,上面说的是一种典型情况,当然还有其它一些情况啦,比如从网络上读取。

这也是为啥在Class类中有一个classLoader的原因所在,如下:

其实关于这点在之前的示例学习中有涉及到过,回顾一下【https://www.cnblogs.com/webor2006/p/8859014.html】:

关于ClassLoader的说明有很多,为了读一点理解一点,这里用代码先去验证一下目前所读到的:

为啥是null呢?根据则才读到的对于数组的类加载器,如果它的元素不是原生类型其类加载器就是元素类加载器,如下:

所以对于strings这个数组来说它的类加载器就是String的类加载器,而根据不同类加载器的特性:

很显然String的类加载器是根类加载器,而根类加载器就是用null来表示的,所以该数组的加载器最终打印就是null喽。

很显然MyTest15咱们自己编写的类的加载器是由应用类加载器来加载的,所以其结果就是它啦:

所对应的原因如:

所以这里需要特别注意:

好了,继续来读ClassLoader的说明:

最新文章

  1. iOS的数据持久化
  2. Swift-ImageView响应点击事件
  3. nefu 117 素数定理
  4. eclipse 导入jdbc4.jar 包
  5. c# 之抽象工厂模式
  6. CentOS6.6安装mysql出现的问题
  7. C语言编程时常犯十八个错误
  8. oracle linux 安装过程错误 :Error in invoking target ‘agent nmhs’ of makefile
  9. python数据类型以及模块的含义
  10. Windows资源
  11. 学习Android过程中的一些博客或工具收集
  12. Java继承详解
  13. 最短路径HDU3790(Dijkstra)
  14. 《超哥带你学Linux》
  15. 数据库与java的连接
  16. Linux-(inotify-tools&rsync)
  17. How to write a professional email?
  18. ELK安装过程
  19. android - Animation详解
  20. Centos7 yum安装Mysql5.7

热门文章

  1. sql注入01
  2. POJ1149 PIGS 【最大流 + 构图】
  3. MIT 6.828 课程介绍
  4. java学习(东软睿道)2019-09-06(预课)《随堂笔记》
  5. SHE姐妹建模记录
  6. AlertManager 部署及使用
  7. Python 语言简介与入门
  8. redhad 7.0更换yum源
  9. sublime 配置大全
  10. luogu4677山区建小学题解--区间DP