JVM中存在三个默认的类加载器:
bootstrap ClassLoader、ExtClassLoader、AppClassLoader
。
- BootStrapClassLoader是ExtClassLoader的⽗类加载器,默认负责加载%JAVA_HOME%lib下的 jar包和class⽂件。
- ExtClassLoader是AppClassLoader的⽗类加载器,负责加载%JAVA_HOME%/lib/ext⽂件夹下的 jar包和class类。
- AppClassLoader是⾃定义类加载器的⽗类,负责加载classpath下的类⽂件。
AppClassLoader的⽗加载器是ExtClassLoader,ExtClassLoader的⽗加载器是 BootstrapClassLoader。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SO3YjN3QTN2YzMxgjN1YTMvw1MwcDMyIDMy8CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
- 如果一个类加载器收到类加载请求,它并不会自己先去加载,而是把这个请求委托给父类加载器去执行。
- 如果父类还存在父类,则进一步委托,依次递归,直到到达启动类加载器。
- 如果父类加载器能完成,则成功返回,不能完成则子类才会尝试自己去加载。
- 避免类的重复加载
- 避免了java的核心API被篡改