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

  • 相关阅读:
    (1)ASCⅡ码与一般乘除与逻辑指令
    (2)串指令的传送
    【转】伟大的代码(97年的Mekka ’97 4K Intro比赛的一等奖作品)汇编机器码
    第四次游戏革命:全息游戏 from:http://www.cnblogs.com/alamiye010/archive/2012/08/15/2640881.html
    sqlce wp
    wp7 blogs
    单例的两种实现方式
    C# event from:http://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html#a4
    wp7——sqlite数据库操作 from:http://blog.csdn.net/wp_lijin/article/details/7370790
    Linq C#增删改查
  • 原文地址:https://www.cnblogs.com/jqctop1/p/4664912.html
Copyright © 2011-2022 走看看