类装载器子系统的作用:是把字节码文件加载到jvm虚拟机中
对于加载具体过程如下:
加载class文件过程最常见的是在本地硬盘中加载,还有如下的一下有其他情况:、
加载的作用就是把文件中的数据作用到java中成为活的数据,在系统中加载该类作为数据可以访问的入口
验证:在验证过程中会对加载进来的class文件开头进行验证是否为标准的格式(java虚拟机为CAFWBABE),下图是class的十六进制编码:
准备阶段(Prepare):会先把变量进行默认初始化(整形为0,浮点为0.0布尔为false等等),常量在这个阶段直接为他赋值好了(final 修饰的static变量)
举例:
private int a= 5
public static final int b= 6
在准备阶段:a=0(initial才会被赋值为5),b=6. 这是因为常用再被定义之后就不会被修改了,而变量则需要经常被修改
解析阶段:就是会准备一下符号引用,对于常量,方法等内容用一下符号表达存放起来。(这个环节一般在初始化以后进行,后面对于方法,常量调用的时候在具体说明)
类构造器方法clinit是对于初始化之前的操作,如果没有静态变量的赋值和静待代码块的语句,clinit方法将不会被执行,父类的clinit会在子类的之前执行
而init才是对应我们平时的构造器方法,
这是对两个变量的赋值过程的情况
原文:https://www.cnblogs.com/wdxjy/p/13918200.html