• Java Object 构造方法的执行顺序


    Java Object 构造方法的执行顺序

    @author ixenos 

    为了使用类而做的准备工作包括三个步骤


    1)加载类加载器查找字节码(一般在classpath中找),从字节码创建一个Class对象

    2)链接:验证字节码,为静态域(只是static修饰的域,不包含static final )分配存储空间,解析此类对其他类的所有引用

    3)初始化:若该类有超类,对其初始化,执行静态初始化器静态初始化块

     

    类初始化时构造方法执行顺序


    对于某一个子类时:

     (1)初始化对象的存储空间为零或null值;(子父类链接完毕,父类初始化完毕后)

     (2)调用父类构造函数无显式调用super(...)时,默认隐式调用super(),否则调用super(...)

     (3)按顺序分别调用类成员变量(例如static int)和实例成员变量(例如int)的初始化表达式;

     (4)调用本身构造函数

     1 public class Dollar extends Money{
     2      Rmb r=new Rmb();
     3     
     4      public Dollar(){
     5       
     6       System.out.println("Dollar is construct!");
     7     
     8      }
     9      public static void main(String[] args){
    10       
    11       new Dollar();
    12       
    13      }
    14 }
    15 class Money{
    16  public Money(){
    17   System.out.println("Money is construct");
    18  }
    19 }
    20 class Rmb{
    21  public Rmb(){
    22   System.out.println("RMB is construct");
    23  }
    24 }
    25 
    26 
    27 /*
    28 输出结果:
    29 Money is construct
    30 RMB is construct
    31 Dollar is construct!
    32 */

    实例化某一个类的对象的时,块和构造器的相对运行顺序


     (1)父类静态块

     (2)子类静态块

     (3)父类块

     (4)父类构造器

     (5)子类块

     (6)子类构造器 

     1 public class Dog {   
     2    public Dog() {   
     3      System.out.println("Dog");   
     4     }   
     5     static{   //静态块
     6         System.out.println("super static block");   
     7     }       
     8   {  //普通块
     9         System.out.println("super block");   
    10     }   
    11 }  
    12  public class Mastiff extends Dog {   
    13     public Mastiff() {   
    14         System.out.println("Mastiff");   
    15     }   
    16      {   
    17         System.out.println("block");   
    18        }   
    19    static {   
    20       System.out.println("static block");   
    21  }   
    22   public static void  main(String[] args){   
    23       Mastiff mastiff=new Mastiff();         //实例化一个对象
    24     }   
    25 } 
    26 
    27 
    28 /*
    29 输出结果:
    30 super static block
    31 static block
    32 super block
    33 Dog
    34 block
    35 Mastiff
    36 */

    部分参考http://blog.sina.com.cn/s/blog_6caeccff0100q5wz.html

  • 相关阅读:
    Java中final,finalize和finally的区别
    EJB
    sql server函数
    rollup和grouping函数
    Java关于抽象类能否被实例化的问题
    jdk
    点击导航文字,页面刷新后仍然是点击状态
    jquery实现全选和取消全选
    去掉required红色边框
    左侧菜单高度自适应右侧内容
  • 原文地址:https://www.cnblogs.com/ixenos/p/5812121.html
Copyright © 2020-2023  润新知