zoukankan      html  css  js  c++  java
  • java对象的初始化顺序

     

    1.初始化涉及的几个部分

    java对象在初始化时不仅仅调用自身的构造方法,还涉及静态语句块、实例语句块、静态变量初始化、成员变量初始化等执行问题,初始化顺序指的就是这五部分的执行顺序。

    2.Demo

    package com.javase.classtest;
    
    public class InitializationSequence {
    
        static {
            System.out.println("静态语句块");
        }
    
        static MyInnerClass in = new MyInnerClass("静态变量s");
    
        MyInnerClass in01 = new MyInnerClass("a");
    
        {
            System.out.println("实例语句块");
        }
    
        MyInnerClass in02 = new MyInnerClass("b");
    
        public InitializationSequence() {
            System.out.println("构造函数");
        }
    
        @SuppressWarnings("unused")
        public static void main(String[] args) {
            InitializationSequence obj01 = new InitializationSequence();
            System.out.println("-----------------------------------");
            InitializationSequence obj02 = new InitializationSequence();
        }
    
    }
    
    class MyInnerClass {
        public MyInnerClass(String description) {
            System.out.println("成员变量初始化::" + description);
        }
    }

    执行结果:

    分析:

    1. 静态语句块:在类加载到JVM时执行,由于JVM使用类的前提是类装载到JVM虚拟机,所以静态语句块首先执行,类只加载一次,静态语句块只执行一次。
    2. 静态变量初始化:由于静态变量为类的所有实例所共享,不依赖于具体的对象,因此不是在对象创建时初始化,而是在类加载时初始化,初始化顺序在静态语句块之后,只执行一次。
    3. 实例语句块:在构造方法前执行,每调用一次构造方法,执行一次。执行顺序在静态变量初始化之后,以成员变量初始化为参照,没有绝对的先后顺序,实际顺序取决于定义的顺序,定义在前,就在成员变量初始化前执行;定义在后,就在成员变量初始化后执行。
    4. 成员变量初始化:在构造方法前执行,每调用一次构造方法,执行一次。执行顺序在静态变量初始化之后,相对于实例语句块的执行顺序取决于定义顺序。
    5. 构造方法:最后执行。

    综上可知,java对象初始化的执行顺序为:静态语句块>静态变量初始化>实例语句块/成员变量初始化>构造方法,实例语句块与成员变量初始化的相对执行顺序取决于定义的先后顺序。

  • 相关阅读:
    多线程设计的要素—任务线程确定
    https://www.neroxie.com/2019/01/22/深入理解GCD之dispatch-group/
    性能、指标、监控、数据大盘
    iOS PhotoKit 笔记
    多线程的核心问题是控制共享变量的无序访问(读写)
    objective-c arc -对象、变量、变量修饰符、赋值
    大幅降低存储成本,Elasticsearch可搜索快照是如何办到的?
    压测利器:TarsBenchmark正确打开方式
    跨国合作:Serverless Components 在腾讯云的落地和实践
    前端视角谈物联网三部曲:连接智能、交互智能、数据智能
  • 原文地址:https://www.cnblogs.com/tonghun/p/7146473.html
Copyright © 2011-2022 走看看