类加载器:ClassLoader

Posted zzfan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类加载器:ClassLoader相关的知识,希望对你有一定的参考价值。

加载流程

当运行一个程序时,JVM启动

  • 运行 bootstrap classloader,该ClassLoader加载Java核心API(ExtClassLoader和AppClassLoader也在此时加载)
  • 调用ExtClassLoader加载扩展API
  • APPClassLoader加载CLASSPATH目录下定义的Class

一些重要的方法

  • loadClass方法,定义如下:
Class loadClass(String name, boolean resovle);
技术图片

name:JVM需要的类的名称

resolve:方法是否需要解析类

  • forName方法
Class class = Class.forName("something");

该方法调用Class.forName(name,initialize,loader);

也就是等同于

Class.forName("something", true, CALLCLASS.class.getClassLoader());

initialize:设置加载类的时候是否连接该类

连接分为三步:

  1. 验证class是否符合规格
  2. 为类变量分配内存的同时设置默认初始值
  3. 解释,这一步是可选的,是否解释由loadClass方法的第二个参数来判断。这里的解释是指根据勒种的符号引用查找相应的实体,再把符号应用替换成一个直接引用的过程。

两个方法的区别:

ClassLoader.loadClass()不会初始化该类,而Class.forName()加载类时会进行初始化

以上是关于类加载器:ClassLoader的主要内容,如果未能解决你的问题,请参考以下文章

[Java安全]类加载器ClassLoader

类加载器ClassLoader的理解

关于类加载器(ClassLoader)

[Java安全]类加载器ClassLoader

[Java安全]类加载器ClassLoader

Java基础之ClassLoader类加载器简介