1、加载
•通过一个类的全限定名来获取定义此类的二进制字节流 ---------->通过包名+类名,获取这个类,准备用流进行传输
•将这个字节流所代表的静态存储结构转化为运行时数据结构 ---------->将这个类加载到内存中
•在内存中生成一个代表这个类的java.lang.Class对象 ----------->加载完毕创建一个class对象
2、链接
a、验证:链接阶段的第一步,这一阶段为了确定class文件字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身安全。
简单理解为看看class文件中的信息是否符虚拟机规范,有没有安全隐患;
b、准备:为类的类变量(被static修饰的静态变量)分配内存,并设置默认初始化值,可以理解为初始化静态变量;
c、解析:将类的二进制数据流中的符号引用替换为直接引用,类加载时类中成员变量的数据类型为引用数据类型,
此时这个引用类型还不知道来自哪里,所以此时用符号替代这个引用类型(比如String name替代为*** name),
那么解析的时候,就会去找这个String引用类型在哪里,并且会把临时符合变成String的引用,将找到后的地址值赋值给这个引用类型;
3、初始化
•根据程序员通过程序制定的主观计划去初始化类变量和其它资源,就是静态变量赋值及初始化其它资源
标签:初始化,变量,虚拟机,String,引用,过程,加载 From: https://www.cnblogs.com/weiduaini/p/17221457.html