类的加载: 加载->链接->初始化
package hike.reflection;
// 类加载类存分析
public class Test04 {
public static void main(String[] args) {
A a = new A();
System.out.println(A.m);
}
/**
* 执行顺序 类加载 -》 链接(验证-》准备-》解析) -》 初始化
* 代码运行,生成Class字节码文件,该字节码文件加载到内存中
* 相当于链接阶段的:验证,(程序运行报错,说明验证不通过)
* java内存中
* 1.方法区(特殊的堆)
* 从字节码文件中读取到 Test04类 和 A类 (静态变量,静态方法,常量,其他代码。。。),
* 相当于链接阶段的:准备,(验证通过了,给类 在内存中 分配空间,并设置其中变量的默认初始值)
* 2.堆
* 在堆中生成Class对象,也包括new 出来的对象(比如A类)
* 3.栈
* 栈中进行初始化,初始化是JVM执行的(<>clint() 方法)
*
*/
}
class A {
static {
System.out.println("A 的静态代码块");
m = 300;
}
static int m = 10;
public A() {
System.out.println("A 的 构造方法");
}
}