趣讲 java反射之类加载器(图文并茂)

类加载器的作用:

将class文件字节码内容加载到内存中,并将这些静态数据转化成方法区的运行时数据结构,然后在堆中生成一个代表这个类的java.lang.Class对象,作为方法区中数据的访问入口。

类缓存:标准的javaSE类加载器可以按照要求查找类,但是一旦某个类被加载到类加载器中,将会维持加载一段时间,不过JVM的垃圾回收机制可以回收这些Class对象

扩展类加载器是加载这块的
在这里插入图片描述
根加载器是加载这块的
在这里插入图片描述

画个流程图了解一下吧

在这里插入图片描述
类加载器的作用:
类加载器是用来把类装载到内存中的,JVM规范定义了如下类型的类加载器

在这里插入图片描述
写个demo测试一下:

package com.company;

public class test06 {
    //获取类加载器
    public static void main(String[] args) throws ClassNotFoundException {
        //获取系统类的加载器
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
        System.out.println(systemClassLoader);

        //获取系统类加载器的父类加载器->扩展类加载器
        ClassLoader parent = systemClassLoader.getParent();
        System.out.println(parent);

        //获取扩展类加载器的父类加载器->根加载器
        ClassLoader parent1 = parent.getParent();
        System.out.println(parent1);

        //测试当前类是哪个类加载的
        ClassLoader classLoader = Class.forName("com.company.test06").getClassLoader();
        System.out.println(classLoader);

        //测试JDK的类是谁加载的,理论上是根加载器加载的,是C++语言写的,返回null
        classLoader = Class.forName("java.lang.Object").getClassLoader();
        System.out.println(classLoader);

        //如何获得系统类加载器可以加载哪些路径
        System.out.println(System.getProperty("java.class.path"));

    }
}

输出结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45806131/article/details/107967937