说明
有以下三类加载器
通过代码验证:
public class Main {
public static void main(String[] args) {
System.out.println(String.class.getClassLoader()); // null
System.out.println(DataSource.class.getClassLoader()); // PlatformClassLoader
System.out.println(Main.class.getClassLoader()); // AppClassLoader
}
}
解释
对于Java核心类,如
java.lang.String,返回null表示使用的是JVM内部的启动类加载器BootClassLoader对于非核心的JDK类,如
javax.sql.DataSource·,使用的是PlatformClassLoader`对于用户编写的类,如
Main,使用的是AppClassLoader
优先级
这3个ClassLoader按优先级排序如下:
- BootClassLoader
- PlatformClassLoader
- AppClassLoader
参考:
https://www.cnblogs.com/yuhushen/p/15371793.html
https://liaoxuefeng.com/books/jerrymouse/load-webapp/classloader/index.html
