类加载器: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()加载类时会进行初始化

猜你喜欢

转载自www.cnblogs.com/zzfan/p/10819140.html