zoukankan      html  css  js  c++  java
  • 反射前序------类加载器(ClsaaLoader)的简单讲述

    概述:

    我们知道当我们第一次使用某一个类的时候,我们需要先将这个类编译成字节码文件,然后将这个字节码文件加载到内存中,这个加载的过程中需要借助类加载器进行加载进内存。

    类加载器的分类:

    • 引导类加载器
    • 扩展类加载器
    • 系统类加载器
    • 自定义类加载器(不做解释)

     其中我们最常使用的就是系统类加载器,下面我们通过代码演示各种类加载器之间的关系:

    public class ClassLoaderDemo {
        public static void main(String[] args) {
    //通过自定义类默认获得的是系统类加载器:AppClassLoader
            ClassLoader classLoader = ClassLoaderDemo.class.getClassLoader();
            System.out.println(classLoader);
            //通过系统类加载器的getParent()方法可以获得扩展类加载器:ExtClassLoader
            ClassLoader classLoaderParent = classLoader.getParent();
            System.out.println(classLoaderParent);
            //但是我们通过扩展类加载器的方法并不能获得引导类加载器
            ClassLoader classLoaderParentParent = classLoaderParent.getParent();
            System.out.println(classLoaderParentParent);//获得的将是null
    //引导类加载器是加载java的核心类库文件的,它使用c++写的,所以我们知道String类的加载器也是引导类加载器
            //但是我们通过String也并不能获得引导类加载器
            ClassLoader classLoader1 = String.class.getClassLoader();
            System.out.println(classLoader1);//输出的将是null
            //基本数据类型是核心类库里面的东西,所以基本数据类型的类加载器也是引导类加载器
            ClassLoader loader = int.class.getClassLoader();
            System.out.println(loader);
        }
    
    
    }
    1.  所以我们通过自定义类的当前运行时类(也就是本类在内存中对应的字节码亦或是对应的Class对象的引用)的getClassLoader();

      方法可以获得系统类加载器(AppClassLoader)

    2. 可以通过系统类加载器的getParent();方法获得扩展类加载器(ExtClassLoader)。

    3. 虽然扩展类加载器也可以调用getParent();方法,但是却无法获取到引导类加载器,获取之后的输出结果是null。

     三种加载器对应的加载工作:

    其实从上图就可以看出:

    • 引导类加载器主要是对java平台的核心类库的加载,而且它使用c++编写的,是JVM自带的加载器
      可以把这个加载器想象成皇室成员专用的加载器(String类就是用的这个加载器)
    • 扩展类加载器负责对jre/lib/ext目录下的jar包装载进工作裤,对java自带的一些jar包加载。
    • 系统类加载器主要对自定义类的加载。
    迎风少年
  • 相关阅读:
    Spark的Shuffle机制
    Map Reduce的代码学习
    本地IDEA跑阿里云服务器Word Count
    HDFS的类学习和API基本操作
    本地IDEA(Windows)访问ECS服务器HBase
    本地IDEA访问ECS服务器HDFS
    阿里云ECS大数据环境搭建
    学会使用vue ui搭建项目
    用vue封装视频预览组件(手机端)
    项目中的部门使用级联选择器,编辑时初始化选中部门解决方案
  • 原文地址:https://www.cnblogs.com/ZYH-coder0927/p/13782119.html
Copyright © 2011-2022 走看看