首页 > 其他分享 >反射2 - 类加载器

反射2 - 类加载器

时间:2023-01-05 15:12:44浏览次数:48  
标签:类库 反射 -- AppClassLoader println class 加载

类加载器

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{

}

标签:类库,反射,--,AppClassLoader,println,class,加载
From: https://www.cnblogs.com/Ashen-/p/17027598.html

相关文章

  • InnoDB 表的批量数据加载
    概述加速innodb表的数据批量加载的方法解决方案将数据导入InnoDB时,关闭自动提交模式,因为它会为每次插入执行日志刷新到磁盘。要在导入操作期间禁用自动提交,请用 SE......
  • 反射1 - 基础
    反射对象获取自身的类对象再通过类对象获取类中的属性、方法、权限等publicclass_Reflect{publicstaticvoidmain(String[]args)throwsNoSuchFieldExcepti......
  • unity3d异步加载场景
    ​​unity3d​​​​loading界面​​​​异步加载​​​​进度条​​根据宣雨松前辈的教程来做的,因为我用到的场景不是在游戏里的那种(本人做增强现实的,完全把unity拿来做应......
  • 获取某地模型并用Cesium加载
     2023-01-04最近想用Cesium给学校做一个类似智慧校园的东西,要做的东西很多,首先是获取学校模型的问题,然后怎么用Cesium加载3Dtile 1.获取学校模型想到之前被老师抓苦......
  • Unity利用协同实现场景异步加载
    1.usingUnityEngine;2.usingSystem.Collections;3.4.publicclassFightTriggle:MonoBehaviour{5.privateAsyncOperationasync;6.i=0;7.......
  • Unity3D中Resources动态加载NGUI图片
    在NGUI中有些图片我需要动态进行变更或者加载,怎么办?首先在项目中创建一个Resources目录,接着把需要的图片放在这里面,可以有子文件夹么?当然可以,文件结构很重要哦~NGUI加载图片......
  • Assetbundle打包及加载入门详解(三)
                 主要讲Assetbundle的网络加载方式之前所讲的都是AssetBundle.LoadFromFile的方法,这是直接从硬盘上加载,而且属于同步加载。WWW.LoadF......
  • Assetbundle打包及加载入门详解(二)
    接着上篇,本节写如何更加科学的打包,以及打包中的一些依赖关系。科学打包:一般来说会把物体打成一个assetbundle包,把材质打成另个包,然后在加载的时候都加载出来。当然如果是有......
  • Assetbundle打包及加载入门详解(一)
    Assetbundle是unity的一种加载方式。这种加载可以从互联网上或者本地的文件夹中加载。要求被加载的文件必须是Assetbundle定义的格式首先制作Assetbundle:在project的Editor......
  • Day 06 模块加载机制
    模块加载机制一、优先从缓存中加载模块在第一次加载后会被缓存,多次调用require()不会导致模块的代码被执行多次不论内置模块、自定义模块、第三方模块都会从缓存中加载......