File tree Expand file tree Collapse file tree 1 file changed +4
-2
lines changed Expand file tree Collapse file tree 1 file changed +4
-2
lines changed Original file line number Diff line number Diff line change 2
2
3
3
类加载过程:** 加载->连接->初始化** 。连接过程又可分为三步:** 验证->准备->解析** 。
4
4
5
+ ![ 类加载过程] ( http://pqrlmrv7w.bkt.clouddn.com/img/2019-4/类加载过程.png )
6
+
5
7
一个非数组类的加载阶段(加载阶段获取类的二进制字节流的动作)是可控性最强的阶段,这一步我们可以去完成还可以自定义类加载器去控制字节流的获取方式(重写一个类加载器的 ` loadClass() ` 方法)。数组类型不通过类加载器创建,它由 Java 虚拟机直接创建。
6
8
7
9
所有的类都由类加载器加载,加载的作用就是将 .class文件加载到内存。
@@ -96,15 +98,15 @@ protected Class<?> loadClass(String name, boolean resolve)
96
98
97
99
双亲委派模型保证了Java程序的稳定运行,可以避免类的重复加载(JVM 区分不同类的方式不仅仅根据类名,相同的类文件被不同的类加载器加载产生的是两个不同的类),也保证了 Java 的核心 API 不被篡改。如果不用没有使用双亲委派模型,而是每个类加载器加载自己的话就会出现一些问题,比如我们编写一个称为 ` java.lang.Object ` 类的话,那么程序运行的时候,系统就会出现多个不同的 ` Object ` 类。
98
100
99
- ### 如果我们不想要双亲委派模型怎么办 ?
101
+ ### 如果我们不想用双亲委派模型怎么办 ?
100
102
101
103
为了避免双亲委托机制,我们可以自己定义一个类加载器,然后重载 ` loadClass() ` 即可。
102
104
103
105
## 自定义类加载器
104
106
105
107
除了 ` BootstrapClassLoader ` 其他类加载器均由 Java 实现且全部继承自` java.lang.ClassLoader ` 。如果我们要自定义自己的类加载器,很明显需要继承 ` ClassLoader ` 。
106
108
107
- ## 推荐
109
+ ## 推荐阅读
108
110
109
111
- < https://blog.csdn.net/xyang81/article/details/7292380 >
110
112
- < https://juejin.im/post/5c04892351882516e70dcc9b >
You can’t perform that action at this time.
0 commit comments