背景
Java源代码被编译器编译成.class的字节码文件,然后由ClassLoader负责将这些class文件给加载到JVM中去生成对应Class对象
ClassLoader分为4层:
BootstrapClassLoader(启动类加载器):核心类,java.lang.*
ExtClassLoader(标准扩展类加载器):jre等扩展类
AppClassLoader(系统类加载器):应用程序的主函数类
CustomClassLoader(用户自定义类加载器):可加载指定路径的类
加载过程
每次加载类时,先从最底层开始,检查该类是否加载过,如果没加载过并且存在父加载器,并在父加载器中执行这个过程,直到不存在父加载器。然后从最顶层开始尝试加载,如果无法加载,则交给下一层加载。如果最底层也无法加载,就抛出异常
作用
1、避免类重复加载
2、保证安全,如果想要篡改一个核心类,但由于核心类会先由顶层ClassLoader加载,其他加载器会检测到这个类已经被加载过,就不会重复加载