java文件在解释成class文件之后,需要对里面的类进行初始化,初始化的过程包括加载、连接、装入三个过程,在加载的过程中会对类里面的静态变量进行一个初始化。下面详细介绍下ClassLoader:
1、类的加载、连接和初始化
类初始化通常包括加载、连接、初始化三个步骤。
(1)进程的结束
每当运行一个java程序时,将会启动一个java虚拟机进程,不管程序多么复杂,有多少线程,都在这个java虚拟机进程里。以下四种情况会使得该进程被终止——
程序运行到最后正常结束; 程序里遭遇了System.exit(),或者是Runtime.getRunTime().exit()代码;程序执行中遇到了未捕获的异常或者错误; java所在平台强制结束了JVM进程;
当该进程结束,那么该进程在内存中的状态将会丢失,包括静态变量的值。
(2)类的加载
类的加载是指将类的class文件读入内存,并为之创建一个java.lang.class对象。
(3)类的连接
类的连接负责把类的二进制数据合并到JRE中,分为三个阶段——
验证:检验被加载的类是否有正确的内部结构; 准备:负责为类的静态Field分配内存,并设置默认初始值;解析:将类的二进制数据中的符号应用替换成直接引用。
(4)类的初始化
类的初始化,主要就是对静态Field进行初始化。
2、类加载器
(1)类加载器简介
类加载器负责加载所有的类,系统为所有载入内存里的类都会生成一个java.lang.class对象;
同一个类只会被加载一次,在JVM中每一个不同的类都会有一个不同的类加载器负责。
类加载器在不包括用户自定义的加载器的情况下包括三层:
Bootstrap Classloader根加载器; ExtensionClassloader扩展类加载器; SystemClassLoader系统类加载器;
①根加载器,又称为引导或者原始加载器,负责加载java的核心类;
②扩展类加载器,负责加载JRE的扩展目录中JAR包的类;
③系统类加载器,又称为应用加载器,
1、类的加载、连接和初始化
类初始化通常包括加载、连接、初始化三个步骤。
(1)进程的结束
每当运行一个java程序时,将会启动一个java虚拟机进程,不管程序多么复杂,有多少线程,都在这个java虚拟机进程里。以下四种情况会使得该进程被终止——
程序运行到最后正常结束; 程序里遭遇了System.exit(),或者是Runtime.getRunTime().exit()代码;程序执行中遇到了未捕获的异常或者错误; java所在平台强制结束了JVM进程;
当该进程结束,那么该进程在内存中的状态将会丢失,包括静态变量的值。
(2)类的加载
类的加载是指将类的class文件读入内存,并为之创建一个java.lang.class对象。
(3)类的连接
类的连接负责把类的二进制数据合并到JRE中,分为三个阶段——
验证:检验被加载的类是否有正确的内部结构; 准备:负责为类的静态Field分配内存,并设置默认初始值;解析:将类的二进制数据中的符号应用替换成直接引用。
(4)类的初始化
类的初始化,主要就是对静态Field进行初始化。
2、类加载器
(1)类加载器简介
类加载器负责加载所有的类,系统为所有载入内存里的类都会生成一个java.lang.class对象;
同一个类只会被加载一次,在JVM中每一个不同的类都会有一个不同的类加载器负责。
类加载器在不包括用户自定义的加载器的情况下包括三层:
Bootstrap Classloader根加载器; ExtensionClassloader扩展类加载器; SystemClassLoader系统类加载器;
①根加载器,又称为引导或者原始加载器,负责加载java的核心类;
②扩展类加载器,负责加载JRE的扩展目录中JAR包的类;
③系统类加载器,又称为应用加载器,