classloader 类加载器和它的双亲委托机制

classloader 类加载器和它的双亲委托机制
classloader 类加载器和它的双亲委托机制_第1张图片

想必很多伙伴儿跟我一样,在接收知识的路上看见有些专业名词的表情如上↑↑↑↑↑ 我就想把这些看起来很难理解的名词给它简单通俗地理解了,有不到之处,还望多多指正,(❁´ω`❁)谢过!

在介绍双亲委派机制的时候,不得不提ClassLoader。说ClassLoader之前,我们得先了解下Java的基本知识。
Java是运行在Java的虚拟机(JVM)中的,但是它是怎么就运行在JVM中了呢?
补充:Java的开发流程 编辑 编译 运行 调试
1.编辑:利用文件编辑器或IDE逐个单词编写代码生成源文件.Java
2.编译:javac.exe 把.java 文件编译成.class文件 (把单词翻译成机器能看懂的语言)
3.运行:字节码文件 .class 经java.exe开启jvm 后 在jvm 上运行
4.调试:根据运行和编译的状态对程序进行调试(比如说碰见ClassNotFoundException呢)

.java文件生成了,.class文件也生成了,那么就到了我们的运行阶段。由我们的ClassLoader负责将这些class文件加载到JVM中去执行。
JVM中提供了三层的ClassLoader:

Bootstrap classLoader:主要负责加载核心的类库(java.lang.*等)jre/lib/rt.jar中的类。
ExtClassLoader:主要负责加载jre/lib/ext目录下的一些扩展的jar。

AppClassLoader:主要负责加载应用程序的主函数类(就是我们自己写的类)。

我主要是想根据双亲委托机制这个专业词汇简单粗暴地理解分析一下,大家想要有更加深入详细地理解,包括从源码上分析,可以看看大佬们写的文章,地址如下:
https://blog.csdn.net/briblue/article/details/54973413

高能来了:
我自己粗浅的理解:(这里就三种classloader进行分析,不包括顶层classloader和自定义classloader)
*把Bootstrap Classloader、ExtClassLoader、AppClassLoader理解成一个家庭,分别是妈妈ExtClassLoader主内(主要负责加载jre/lib/ext目录下的一些扩展的jar),爸爸Bootstrap Classloader主外(主要负责加载核心的类库(java.lang.等)jre/lib/rt.jar中的类),和会解决问题的孩子AppClassLoader(解决我们写的类)。当孩子遇到问题时(比如加载HelloJava.class文件啦),想也不想先去找妈妈,妈妈想也没想就把皮球踢给了爸爸,爸爸看了看,发现不是自己负责的区域,皮球再踢回给妈妈,妈妈这才看看是不是自己能解决,结果发现也不是自己领域的问题,这个问题还得孩子自己解决。最后问题又回到了孩子这里,孩子这才开始看问题,发现嘿这么简单,我自己能解决,程序运行。
当然这只是个小例子,说得也只是其中的一种情况,毕竟也有可能会classnotfound,或者走自己写的classloader(也就是孩子的孩子)。
要说明的是,双亲委托机制是个安全的机制,你想,万一你自己写了个核心类(iniclass,里面写了个关闭虚拟机的方法),如果直接就被appclassloader执行,那不就搞笑了,再或者就是自己写了个跟核心类库同名的方法,人家不用jdk自带的类而用你写的垃圾类(这是我学习的时候老师吐槽我们自己写的类)也不行啊。

你可能感兴趣的:(classloader 类加载器和它的双亲委托机制)