Java Object 构造方法的执行顺序

Posted IXENOS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Object 构造方法的执行顺序相关的知识,希望对你有一定的参考价值。

Java Object 构造方法的执行顺序

@author ixenos 

 

 

 

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


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

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

3)初始化:若该类有超类,对其初始化,执行静态初始化器(构造器算一个)和静态初始化块

 

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


对于某一个子类时:

 (1)初始化对象的存储空间为零或null值;

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

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

 (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 Object 构造方法的执行顺序的主要内容,如果未能解决你的问题,请参考以下文章

Java面试题 静态代码块 构造代码块 构造方法 的执行顺序

java静态代码块,构造方法,构造代码块的执行先后顺序

java代码块,静态代码块,静态变量,构造方法执行顺序

Java代码执行顺序

一文详解:Java中父子类静态块构造块构造方法成员变量之间的初始化先后顺序与执行先后顺序

面试趣闻之java 代码块 静态代码块 构造方法 执行顺序