什么是类加载器? 您所在的位置:网站首页 dart类加载器 什么是类加载器?

什么是类加载器?

2023-11-05 13:36| 来源: 网络整理| 查看: 265

 

类加载器   什么是类加载器,作用是什么?

类加载器就是加载字节码文件(.class)的类

  Java语言是一种具有动态性的解释语言,类(CLASS) 只有被加载到 JVM 中后才能运行。当运行指定程序时,JVM会将编译生成的.class文件按照需求和一定的规则加载到内存中,组织成为一个完整的Java应用程序。这个加载的过程是由类加载器来完成的,具体来说,就是由ClassLoader和它的子类来实现的。类加载器本身也是一个类,其实质是把类文件从硬盘读取到内存中!

  类加载的方式分为隐式加载和显示加载两种。隐式加载指的是程序在使用new 等方式创建对象时,会隐式地调用类的加载器把对应的类加载到JVM中。显式加载式指的是通过直接调用class.forName()方法把所需的类加载到JVM中。

  在Javay语言中,类的加载是动态的,它并不会一次性将所有的类全部加载后再运行,而是保证程序运行的基础类(例如基类)完全加载到JVM中,至于其他类,则在需要时才加载。在Java语言中,可以把类分成3类:系统类,扩展类,自定义类。Java针对这3种不同的类提供了3中类型的加载器,这3种加载器的关系如下:

1)BootStrap:引导类加载器:加载都是最基础的文件

2)ExtClassLoader:扩展类加载器:加载都是基础的文件

3)AppClassLoader:应用类加载器:三方jar包和自己编写java文件

 

以上这3个类是如何协调工作来完成类的加载呢?

  其实,它们通过委托的方式实现的。具体而言,就是当有类需要被加载时,类加载器会请求父类来完成这个载入工作,父类会使用其自己的搜索路径来搜索需要被载入的类,如果搜索不到,才会由子类按照其搜索路径来搜索待加载的类。

/** * Created by Ming on 2017/10/17. */ public class TestLoader { public static void main(String[] args) { ClassLoader classLoader = TestLoader.class.getClassLoader(); System.out.println(classLoader); System.out.println(classLoader.getParent()); System.out.println(classLoader.getParent().getParent()); } }

输出结果为:

  可以看出,TestLoader类是由AppClassLoader来加载的。因为BootStrap Loader类加载器先搜索其指定目录找不到TestLoader类,其次ExtClassLoader也找不到,最后AppClassLoader在ClassPath找到了TestLoader类。

注意:Bootstrap Loader是用C++语言实现的,所有在Java语言是看不到它,输出为null.

类加载器主要步骤分为以下3步:

1.装载。(根据查找路径找到相对应的calss文件,然后导入。)

2.链接  (链接又分为3个小步骤:1。检查:检查待加载的class文件的正确性。2。准备:给类中的静态变量分配存储空间。3。解析:将符号引用转换成直接引用.)

3.初始化。(对静态变量和静态代码块执行初始化工作。)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有