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核心技术》

  • 相关阅读:
    程序报错怎么进入调试
    va01 无定价过程能被确定
    维护销售区域数据
    SAP VA01 消息 没有用于售达方 XXXXXX 的客户主记录存在
    SAP常见问题与解决方法
    客户没有对功能定义,合作伙伴
    SAP名词解释-售达方|送达方
    英语-20210312
    配置预付款-科目对应关系FBKP
    unzip 解压指定的文件夹或文件 到指定的目录
  • 原文地址:https://www.cnblogs.com/jqctop1/p/4664912.html
Copyright © 2011-2022 走看看