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

      1. 初始化块

       初始化块通常写在类的构造方法之前,由花括号括起来,通常包含对成员属性进行初始化的语句;

       初始化块分为instance初始化块和static初始化块,初始化块在构造方法执行之前被执行;

       static初始化块不能访问非statci成员,也不能调用非static方法,并且只在类加载时执行一次;

       初始化块通常用于提取多个构造方法中的公共代码。

       2. 初始化的执行顺序

      (1)在初次new一个Child类对象时,发现其有父类,则先加载Parent类,再加载Child类。

      (2)加载Parent类:

             初始化Parent类的static属性,赋默认值;

             执行Parent类的static初始化块;

      (3)加载Child类:

         初始化Child类的static属性,赋默认值;

       执行Child类的static初始化块;

      (4)创建Parent类对象:

             初始化Parent类的非static属性,赋默认值;

         执行Parent类的instance初始化块;

         执行Parent类的构造方法;

      (5)创建Child类对象:

         初始化Child类的非static属性,赋默认值;

       执行Child类的instance初始化块;

         执行Child类的构造方法;

      后面再创建Child类对象时,就按照顺序执行(4)(5)两步。

      

    class Parent
    {
      private static int ps;
      private int pv;
      
      static
      {
         System.out.println("parent static init block");
      }
      
      {
         System.out.println("parent init block");
      }
      
      Parent()
      {
         System.out.println("parent constructor"); 
      }
      
    }
    
    class Child extends Parent
    {    
        private static int cs;
        private int cv;
          
        static
        {
             System.out.println("child static init block");
        }
          
        {
             System.out.println("child init block");
        }
          
        Child()
        {
             System.out.println("child constructor"); 
        }
     
    }
    
    public class Test
    {
       public static void main(String[] args)
       {
           new Child();
           new Child();
       }
    }

     执行结果是:     

      parent static init block

      child static init block

      parent init block

      parent constructor

      child init block

      child constructor

      parent init block

      parent constructor

      child init block

      child constructor

    参考资料 《Java核心技术》

  • 相关阅读:
    八、运维管理链码
    六、编写第一个应用【外部nodejs调用】
    七、链码
    五、005-环境安装【docker、fabric】
    Webpack 4 SplitChunksPlugin配置方案(转)
    转:webpack代码压缩优化
    这样使用 GPU 渲染 CSS 动画(转)
    express中间件--Morgan 日志记录
    盘点 React 16.0 ~ 16.5 主要更新及其应用
    求最大容积
  • 原文地址:https://www.cnblogs.com/jqctop1/p/4664912.html
Copyright © 2011-2022 走看看