提交 55c7661b 编写于 作者: S SnailClimb

Update 类加载器.md

上级 461938d0
......@@ -2,6 +2,8 @@
类加载过程:**加载->连接->初始化**。连接过程又可分为三步:**验证->准备->解析**
![类加载过程](http://pqrlmrv7w.bkt.clouddn.com/img/2019-4/类加载过程.png)
一个非数组类的加载阶段(加载阶段获取类的二进制字节流的动作)是可控性最强的阶段,这一步我们可以去完成还可以自定义类加载器去控制字节流的获取方式(重写一个类加载器的 `loadClass()` 方法)。数组类型不通过类加载器创建,它由 Java 虚拟机直接创建。
所有的类都由类加载器加载,加载的作用就是将 .class文件加载到内存。
......@@ -96,7 +98,7 @@ protected Class<?> loadClass(String name, boolean resolve)
双亲委派模型保证了Java程序的稳定运行,可以避免类的重复加载(JVM 区分不同类的方式不仅仅根据类名,相同的类文件被不同的类加载器加载产生的是两个不同的类),也保证了 Java 的核心 API 不被篡改。如果不用没有使用双亲委派模型,而是每个类加载器加载自己的话就会出现一些问题,比如我们编写一个称为 `java.lang.Object` 类的话,那么程序运行的时候,系统就会出现多个不同的 `Object` 类。
### 如果我们不想双亲委派模型怎么办?
### 如果我们不想双亲委派模型怎么办?
为了避免双亲委托机制,我们可以自己定义一个类加载器,然后重载 `loadClass()` 即可。
......@@ -104,7 +106,7 @@ protected Class<?> loadClass(String name, boolean resolve)
除了 `BootstrapClassLoader` 其他类加载器均由 Java 实现且全部继承自`java.lang.ClassLoader`。如果我们要自定义自己的类加载器,很明显需要继承 `ClassLoader`
## 推荐
## 推荐阅读
- <https://blog.csdn.net/xyang81/article/details/7292380>
- <https://juejin.im/post/5c04892351882516e70dcc9b>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册