版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36520235/article/details/82223191
类加载机制
(一)类加载机制的过程和类的生命周期:
首先类加载分为三个大阶段:
(1)、加载
(2)、连接
1. 验证
2. 准备
3. 解析
(3)、初始化
具体每一步的详情都是干嘛的:
用一个例子来理解类是如何进行加载的
public class TestInstance {
public static TestInstance instance = new TestInstance();
public static int a;
public static int b = 0;
public TestInstance() {
a++;
b++;
}
public static void main(String[] args) {
System.out.print(TestInstance.a);
System.out.println(TestInstance.b);
}
}
//最后输出的结果是 1、0
分析原因如下:
- 首先是因为在类的加载顺序中在第二大步的连接中的准备阶段,是没有直接初始化的,而是先进行一个默认的初始化操作就是把所有的变量都先默认为0,并分配空间。
- 类变量是被 static 修饰的变量,准备阶段为类变量分配内存并设置初始值,使用的是方法区的内存。实例变量不会在这阶段分配内存,它将会在对象实例化时随着对象一起分配在堆中。
- 显示初始化就是在类里面的定义好的成员变量给直接加载到初始化,而不是在第二大步连接阶段的准备阶段才开始去初始化