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

  • 相关阅读:
    ubuntu下安装pip
    [算法]获得最短路径的Floyd与Dijkstra算法
    win2003终端服务授权
    Cookie 读取,解决中文乱码
    MOSS自动备份
    MOSS 开发收藏
    Private Protect Partial Internal Public 区别
    怎么设置OUTLOOK接收邮件时,网站邮箱的原始文件也保存着?
    正则表达式实战
    SQL Server 2005 数据库用户和登录帐户设置关链
  • 原文地址:https://www.cnblogs.com/jqctop1/p/4664912.html
Copyright © 2011-2022 走看看