C++类装载器-ClassLoader

类装载器的做事机制

恍如装载器就是找类似的配节码文件并组织出类在JVM内部表示对象的零件。在Java中,类装载器把一个类装入JVM中,需要通过以下步骤:

  1. 装:查找和导入Class文件。
  2. 链接:执行校验、准备与分析步骤,其中解析步骤是好选的。
    1. 校验:检查载入Class文件数量的正确。
    2. 预备:给类的静态变量分配存储空间。
    3. 解析:将符号引用转换成为直接引用。
  3. 初始化:对类的静态变量、静态代码块执行初始化工作。
    恍如装载工作由ClassLoader及其子类负责。ClassLoader是一个要的Java运行时系统组件,它承担在运作时找和装入Class字节码文件,JVM在运转会时有发生3个ClassLoader:根装载器、ExtClassLoader(扩展类装载器)和AppClassLoader(应用类装载器)。其中,根装载不是ClassLoader的子类,它使C++语言编写,因而当Java中看不到它们,根装载器负责装载JRE的主干类库,如JRE目标下的rt.jar、charsets.jar等。ExtClassLoader和AppClassLoader都是ClassLoader的子类,其中ExtClassLoader负责装载JRE扩展目录ext中的JAR类包;AppClassLoader负责装载Classpath路径下之类包。

眼看3只类似装载器之间在父子层级关系,即到底装载器是ExtClassLoader的父装载器,ExtClassLoader是AppClassLoaderde父装载器。在默认情况下,使用AppClassLoader装载应用程序的类。

JVM装在类时用”全盘负责信托机制”,”全盘负责”是依靠当一个ClassLoader装载一个像样时,除非显式地采用其他一个ClassLoader,该类所依靠与引用也鉴于这ClassLoader载入;”委托机制”是乘先寄父装载器寻找目标类,只有在物色不顶的事态下才起自己之好像路径下搜寻并载目标类。这一点凡由平安角度考虑的。

ClassLoader的要方法

在Java中,ClassLoader是一个抽象类,位于java.lang包中。下面对该类的组成部分着重接口方法进行介绍。

  • Class loadClass(String name):
    name参数指定类装载器需要装载类的名字,必须下全限定类名。该地方发生一个重载方法loadClass(String
    name,boolean
    resolve),resolve参数告诉装载器是否用分析该类,在初始化类之前,应考虑进行类似解析的劳作,但并无是富有的切近都亟需分析该类。如果JVM只待理解该类是否在或者找有该类的超类,那么就是未待进行解析。
  • Class definClass(String name,byte[] b,int off,int len):
    将类文件的字节数组转换成JVM内部的java.lang.Class对象,字节数组可以自当地文件系统、远程网络取。参数name为字节数组对应之全限定类名。
  • Class findSystemClass(String
    name):从本地文件系统载入Class文件。如果当地文件系统不在该ClassC++文件,则用抛出ClassNotFoundException异常,该措施是JVM默认使用的装机制。
  • CLass findLoadedClass(String name):
    调用该法来查阅ClassLoader是否业已盛某个类。如果既装,那么回java.lang.Class对象;否则回null,如果强行装载已存在的类,那么用会丢来链接错误。
  • ClassLoader
    getParent():获取类装载器的父装载器。除根装载器外,所有的类装载器有且只来一个父装载器。ExtClassLoader的父装载器是根装载器,因为根装载器非Java语言编写,所以无法取,将回到null。