java类加载器
- jdk自带有三个类加载器:BootstrapClassLoader、ExtClassLoader、APPClassLoader。
- BootStrapClassLoader时ExtClassLoader的父类加载器 (这里所说的父类加载器时组合关系,并不是继承关系) 默认负责加载%JAVA_HOME%lib目录下的jar和class文件。
- ExtClassLoader是APPClassLoader的父类加载器 也是组合关系,负责加载%JAVA_HOME%lib/ext文件下的jar和class文件。
- APPClassLoader是自定义类的加载器,负责加载classpath下的类文件。加载程序员自己写的类文件和引入的第三方jar包
- 还可以继承ClassLoader实现自定义类加载器。
双亲委派
双亲委派机制好处
- 主要是为了安全性,避免用户自己编写的类动态替换java的一些核心类,比如String
- 同时也可以避免类的重复加载,因为jvm中区分不同类,不仅仅是根据类名,相同的class文件被不同的ClassLoader加载就是不同的两个类。识别两个类是否为相同:全路径 + 类加载器