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对象初始化的执行顺序为:静态语句块>静态变量初始化>实例语句块/成员变量初始化>构造方法,实例语句块与成员变量初始化的相对执行顺序取决于定义的先后顺序。

  • 相关阅读:
    ADSL PPPoE出错详解及宽带连接中的一些错误代码含义
    2007年世界顶级防火墙排名(附下载地址)
    Asp.net Mvc问题索引
    .NET 操作GPRS Model的类库 ATSMS
    .NET 3.5多个工程编译的DOS命令
    Google Chrome浏览器JS执行效率惊人 实测比IE快十几倍
    FTP文件同步工具(FTP_File_Synchronizer) 源代码
    [转载] ORACLE中SQL查询优化研究
    ext的grid导出为excel 方法
    数据库分页SQL语句
  • 原文地址:https://www.cnblogs.com/tonghun/p/7146473.html
Copyright © 2011-2022 走看看