前言
之前看到阿里的一个面试题,JAVA类的双亲委派加载机制是什么?有什么好处?工作这么久,还不知道一个JAVA类如何被加载到内存并运行起来的有点羞愧。不懂但是会搜索啊,这篇文章就这样诞生了。本文主要总结了JAVA的类加载模型(classLoader),一个类的加载过程。
ClassLoaderr定义
我们用eclipse或idea编写一个xxx.java文件,通过编译器编译成xxx.class文件,ClassLoader就是用来加载这些class文件到内存当中的。
三个默认ClassLoader
一、BootStrap ClassLoader:启动类加载器,最顶层类加载器,负责加载JDK中的核心类库,如:rt.jar、resources.jar、charsets.jar等。
二、Extension ClassLoader:扩展类加载器,负责加载Java的扩展类库,默认加载JAVA_HOME/jre/lib/ext/目下的所有jar。
三、App ClassLoader:系统类加载器,负责加载应用程序classpath目录下的所有jar。
除了Java默认提供的三个ClassLoader之外,用户还可以根据需要定义自已的ClassLoader,而这些自定义的ClassLoader都必须继承自java.lang.ClassLoader类(Extension ClassLoader和App ClassLoader也继承ClassLoader类)、以及重写父类的findClass方法,但是Bootstrap Cl