java初始化构造函数调用顺序

转载 2015年11月18日 10:56:03

类初始化时构造函数调用顺序:
  (1)初始化对象的存储空间为零或null值;
  
(2)调用父类构造函数;
  (3)按顺序分别调用类成员变量和实例成员变量的初始化表达式;
  (4)调用本身构造函数

例子:
public class Dollar extends Money{
     Rmb r=new Rmb();
    
     public Dollar(){
      
      System.out.println("Dollar is construct!");
    
     }
     public static void main(String[] args){
      
      new Dollar();
      
     }
}

class Money{
 public Money(){
  System.out.println("Money is construct");
 }
}

class Rmb{
 public Rmb(){
  System.out.println("RMB is construct");
 }
}

输出结果:
Money is construct
RMB is construct
Dollar is construct!

在我们的程序中,实例化一个类对象的时候,运行顺序为:

 

  1.   静态块
  2.   父类构造器
  3.   本类中的块
  4.   本类的构造器 

public class Dog {   

   public Dog() {   

     System.out.println("Dog");   

    }   

    static{   //静态块

        System.out.println("super static block");   

    }       

  {   

        System.out.println("super block");   

    }   

}  

 public class Mastiff extends Dog {   

    public Mastiff() {   

        System.out.println("Mastiff");   

    }   

     {   

        System.out.println("block");   

       }   

   static {   

      System.out.println("static block");   

 }   

  public static void  main(String[] args){   

      Mastiff mastiff=new Mastiff();         //实例化一个对象

    }   

}   

输出结果:
super static block
static block
super block
Dog
block
Mastiff

 也就是说此时的运行顺序为:

  1.    父类静态块
  2.    自身静态块
  3.    父类块
  4.    父类构造器
  5.    自身块
  6.    自身构造器 

Java构造函数调用顺序

使用super调用父类构造器的语句必须是子类构造器的第一条语句,如果子类构造器没有显式地调用父类的构造器,则将自动调用父类的默认(没有参数)的构造器。如果父类没有不带参数的构造器,并且在子类的构造器中...

java继承的构造函数调用顺序

1、首先调用父类的无参构造函数(这个构造han)

理解C++存在继承和组合的对象构造函数调用顺序

前言: Hello,全世界早上好啊,哈哈,9月你好,2015年9月的第一天,也是自己本科生涯的最后一年了,接下来就是校招走上自己的职场,昨天是大四的第一节课,上的是软件工程,挺喜欢的一门课,...

关于父类与子类的构造函数调用顺序

关于父类与子类的构造函数调用顺序

C++中类的构造函数调用顺序

当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止。简而言之,对象是由“底层向上”开始构造的。因为,构造函数一开...

C++虚继承(九) --- 构造函数调用顺序的实用之处

虚拟继承是C++语言中一个非常重要但是又比较生僻的存在,它的定义非常简单,但是对于理解C++的继承机制却是非常有用的。笔者最近学习过程中发现对C++的虚拟继承不是很明朗,故在这里对虚继承做个小结。 ...

C++中多重继承构造函数调用的先后顺序

#include using namespace std; class E { public: E() { cout

C++中类的构造函数调用顺序

C++子类和父类的构造函数调用顺序 #include using namespace std; //子类 class base { public: base() { cout...

多继承时的构造函数调用的顺序

调用顺序是:虚基类——直接基类——子对象——派生类 我们假设一个非常复杂的情况: class A; class B: virtual public A; class C: virtual public...

C++虚继承(七) --- 虚继承对基类构造函数调用顺序的影响

继承作为面向对象编程的一种基本特征,其使用频率非常高。而继承包含了虚拟继承和普通继承,在可见性上分为public、protected、private。可见性继承比较简单,而虚拟继承对学习c++的难度较...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java初始化构造函数调用顺序
举报原因:
原因补充:

(最多只允许输入30个字)