一个类被初始化的过程

Posted super码王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个类被初始化的过程相关的知识,希望对你有一定的参考价值。

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

JVM一个类的加载过程_super码王的博客-CSDN博客https://blog.csdn.net/qq_41885673/article/details/123823226其中,初始化阶段是我们作为程序员最关心的阶段,我们下面就来仔细剖析一下其中的缘由。

类的初始化阶段,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 对象:

创建 hello 对象

以上是关于一个类被初始化的过程的主要内容,如果未能解决你的问题,请参考以下文章

3class文件加载过程

死锁的概念以及发生死锁的缘由

类的生命周期

Python-函数

2019年开春第一篇

Java学习:反射