java类的加载,链接与初始化
·
1.加载。将class文件字节码内容加载到内存中,并将这些静态数据转换为方法区的运行时数据结构,然后生成一个java.lang.class对象,代表这个类。
2.链接:将Java类的二进制代码合并到JVM的运行状态之中的过程
2.1.验证:确保加载的类信息符合JVM规范,没有安全方面的问题
2.2. 准备:正式为类变量(static)分配内存并设置类变量默认初始值,这些内存都将在方法区中进行分配。
2.3. 解析虚拟机常量池内的符号引用(常量名)替换为直接引用(地址)的过程
3.初始化:
3.1执行类构造器<clinit》()方法的过程。类构造器<clinit》()方法是由编译器自动收集类中所有类变量的赋值动作和静态代码块中的语句合并产生的。类构造器是构造类信息的,不是构造该类对象的构造器。
3.2 .当初始化一个类的时候,如果发现其法雷还没有进行初始化,则需要先触发其父类的初始化。
3.3 .虚拟机会保证一个类的 <clinit》()方法在多线程中被正确加锁和同步。
public class Test2 {
/**
*执行结果:静态区,无参构造,10
* Java类的加载,链接,初始化
* 加载:产生一个java.lang.class对象到内存
* 链接:创建Java类中的静态区域,并将这些域的值设为默认值
* 初始化:执行静态代码块和初始化静态区域
*/
public static void main(String[] args) {
A a = new A();
System.out.println(a.m);
}
}
class A{
static {
System.out.println("静态区");
m = 3;
}
static int m = 10;
public A(){
System.out.println("无参构造");
}
}
更多推荐

所有评论(0)