反射2 - 类加载器

类加载器

Java的类主要分为3种

  • Java核心类库:String, Object ...
  • JVM软件平台开发商
  • 自己声明定义的类:User, Child ...

相应的类加载器也有3种 -- Java17

  • BootClassLoader 启动类加载器 -- 加载Java核心类库 -- 加载类时,采用操作系统平台语言实现
  • PlatformClassLoader 平台加载器
  • AppClassLoader 应用类加载器

Java17类加载器

相应的类加载器也有3种 -- Java8

  • BootstrapClassLoader 是顶级加载器,默认加载的是%JAVA_HOME%中lib下的jar包和class类文件,他也是ExtClassLoader的父类,但是不是继承(extends)关系,是ExtClassLoder中有一个parent变量是BootstrapClassLoader
  • ExtClassLoader 扩展类加载器,负责加载%JAVA_HOME%中lib/ext文件下的jar包和class类文件,ExtClassLoader加载器是AppClassLoader的父类,当然也不是继承(extends)关系,也是类中有parent变量
  • AppClassLoader (应用程序加载器/系统类加载器)是自定义加载器的父类,负责加载classPath下的类文件,平时引用的jar包以及我们自己写的类都是这个加载器进行加载的,同时AppClassLoader还是线程上下文加载器,如果想实现一个自定义加载器的话就继承(extends)ClassLoader来实现

Java8类加载器

Java8

public class ClassLoader {
    public static void main(String[] args) {
        //TODO 类名.class 获取类信息
        Class<Student> studentClass = Student.class;

        //TODO .getClassLoader() 获取类加载器
        java.lang.ClassLoader classLoader = studentClass.getClassLoader();
        System.out.println(classLoader);  //sun.misc.Launcher$AppClassLoader@18b4aac2

        //String的加载器 -- 启动类加载器,加载类时,采用操作系统平台语言实现
        Class<String> stringClass = String.class;

        java.lang.ClassLoader classLoader1 = stringClass.getClassLoader();
        System.out.println(classLoader1);  //null

        // 加载Java核心类库 > 平台类库 > 用户定义的类
        // -- 下级可以获取上级,因为上级必须在下级前加载
        System.out.println(classLoader.getParent()); //sun.misc.Launcher$ExtClassLoader@1b6d3586
        System.out.println(classLoader.getParent().getParent()); //null


    }
}

class Student{

}
posted @   LaViez  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体
点击右上角即可分享
微信分享提示