1.类加载子系统作用:
① 类加载器子系统负责从文件系统或网络中加载class文件,class文件开头有特定的件标识。
② classLoader只负责class文件的加载,至于是否可以运行,则可以运行,则由Excution Engin决定。
③ 加载类的信息存放在一块程为方法区的内存空间,除了类信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息总是class文件常量池部分内存映射)。
2.类加载器ClassLoader角色
① class file时存放在磁盘上,可以理解为设计师在纸上的模板,而最终这个模板在执行的时候时要加载到JVM当中来,根据这个文件实例化出n个一模一样的实例。
② class file加载daoJVM中,被称为DNA元数据模板,放在方法区。
③ 在.class文件->jVM->最终成为元数据模板,此过程就要一个运输工具(类加载器)Class Loader),扮演一个快递员角色。
3.类加载过程:加载——>验证——>准备——>解析——>初始化。
4.加载实例
代码:
package com.lut.excise;
public class ClassLoaderTest1 {
private static int num=1;
{
num=2;
}
public static void main(String[] args) {
System.out.println(num);
}
}
加载分析:
这是上面代码的加载过程,首先是给num赋值,让在静态代码块中覆盖等于2.
如果有静态变量就执行<clinit>初始化。如果没有就用<init>初始化。
5.加载
① 通过一个类的全限定名定义此类的二进制字节流。
② 将一个字节流所代表的静态存储结构转化为方法区的运行时结构。
③ 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各个数据的访问入口。