java ClassLoader 类加载器

说明

有以下三类加载器

通过代码验证:

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按优先级排序如下:

  1. BootClassLoader
  2. PlatformClassLoader
  3. AppClassLoader

参考:
https://www.cnblogs.com/yuhushen/p/15371793.html
https://liaoxuefeng.com/books/jerrymouse/load-webapp/classloader/index.html


原文出处:/show_1GWB9sshpJH.html