天天看点

一个类被初始化的过程

在上一讲中我们了解了 JVM一个类的加载过程 :

JVM一个类的加载过程_super码王的博客-其中,初始化阶段是我们作为程序员最关心的阶段,我们下面就来仔细剖析一下其中的缘由。

类的初始化阶段,java虚拟机才真正开始执行类中编写的java代码;

进行准备阶段时,变量已经赋过一次系统要求的初始零值,而在初始化阶段,才真正初始化类变量和其他资源;

代码演示

package com.wust.yq;

public class Hello {

    //静态常量 == 准备阶段就赋予自己该有的值
    public static final String staticConstantField = "静态常量";

    //静态变量 == 准备阶段赋予零值(int = 0 引用 = null),初始化阶段赋予自己该有的值
    public static String staticField = "静态变量";

    //实例变量 == 创建对象的时候赋值
    public String field = "变量";

    //静态初始化块 == 初始化阶段执行
    static {
        System.out.println(staticConstantField);
        System.out.println(staticField);
        System.out.println("静态初始化块");
    }

    //初始化块 == 创建对象的时候执行
    {
        System.out.println(field);
        System.out.println("初始化块");
    }

    //构造器 == 创建对象的时候执行
    public Hello() {
        System.out.println("构造器");
    }

    // -XX:+TraceClassLoading 监控类的加载
    public static void main(String[] args) {
        //这句话决定了是否初始化对象,决定了 实例变量 、初始化块 和 构造器是否执行
//        new Hello();
    }

}      

演示结果

未创建 hello 对象:

一个类被初始化的过程