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

  • 相关阅读:
    云钉一体应用创新:音视频如何带来灵活高效的协同体验
    正则表达式,去除非数字。js动态计算
    使用DbContext实体类访问数据库
    C#字符串去除特殊字符
    实体类赋值给控件,控件赋值给实体类
    List去除重复项。
    分页查询的sql语句
    js页面处理常见问题
    .net Table 导出Excel
    上传文件。普通和ftp
  • 原文地址:https://www.cnblogs.com/jqctop1/p/4664912.html
Copyright © 2011-2022 走看看