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

类初始化时构造函数调用顺序:

(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. 父类实例成员变量
  5. 父类块
  6. 父类构造器
  7. 自身实例成员变量
  8. 自身块
  9. 自身构造器
时间: 2024-12-14 20:03:57

java初始化构造函数调用顺序的相关文章

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

当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止.简而言之,对象是由"底层向上"开始构造的.因为,构造函数一开始构造时,总是要调用它的基类的构造函数,然后才开始执行其构造函数体,调用直接基类构造函数时,如果无专门说明,就调用直接基类的默认构造函数.在对象析构时,其顺序正好相反. 下面的这个程序说明这个问题 总结下来,我们必须明确的是当一个类继承与基类,并且自身还包含有其他类的成员对象的时候,构造函

C++多重继承构造函数调用顺序

//以典型实例说明 1 class B1{}; 2 class V1:public B1(); 3 class D1:virtual public V1(); 4 class B2{}; 5 class B3{}; 6 class V2:public B1,publicB2{}; 7 class D2:virtual public V2,public B3{}; 8 class M1{}; 9 class M2{}; 10 class X:public D1,public D2 11 { 12

java初始化的执行顺序

Java初始化(initialization)其实包含两部分: 1.类的初始化(initialization class & interface)2.对象的创建(creation of new class instances).因为类的初始化其实是类加载(loading of classes)的最后一步,所以很多书中把它归结为“对象的创建”的第一步.其实只是看问题的角度不同而已.为了更清楚的理解,这里还是分开来. 顺序:应为类的加载肯定是第一步的,所以类的初始化在前.大体的初始化顺序是:类初始化

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

C++中若某类a从基类b.虚基类c派生而来,且该类中具有对象成员d,则在构造该类的对象时执行构造函数的顺序? 构造一个类的对象的一般顺序是:class a:public b, virtual public c{}; 1.如果该类有直接或间接虚基类,先执行虚基类的构造函数: 2.如果该类有其他基类,按照他们在继承声明列表中出现的顺序分别执行构造函数,但是不再执行它们的虚基类的构造函数. 3.按照在类定义中出现的顺序,对派生类中新增的成员对象进行初始化. 4.执行构造函数函数体. 所以本题构造函数执

C++构造函数调用顺序

http%3A%2F%2F1.1%E6%96%B0%E5%BB%BA%E4%BC%9A%E8%AF%9D%E5%A4%B1%E8%B4%A5 http://index.ttplayer.com/songlist/502663901 http://list.mp3.baidu.com/songlist/502212235 http://list.mp3.baidu.com/songlist/502173428 http://list.mp3.baidu.com/songlist/502783840

继承中的构造析构函数调用顺序

子类构造函数必须堆继承的成员进行初始化: 1. 通过初始化列表或则赋值的方式进行初始化(子类无法访问父类私有成员) 2. 调用父类构造函数进行初始化 2.1  隐式调用:子类在被创建时自动调用父类构造函数(只能调用父类的无参构造函数和使用默认参数的构造函数) 2.2  显示调用:在初始化列表调用父类构造函数(适用所有的父类构造函数) #include <iostream> #include <string> using namespace std; class PParent //

虚函数析构函数调用顺序

析构函数参考:http://blog.csdn.net/zengchen__acmer/article/details/22592195?utm_source=tuicool构造函数参考:http://www.cnblogs.com/nliao/archive/2012/02/05/2339175.html C++构造函数调用顺序: 1.创建派生类的对象,基类的构造函数函数优先被调用(也优先于派生类里的成员类,多继承时,按照派生表的顺序依次调用): 2.如果类里面有成员类,成员类的构造函数优先被

Java中 初始化的先后顺序?

我们在java中 Java中初始化的顺寻? java代码: package sru.love.c; class Person { String name = "Person"; static { System.out.println("我是 Person 的 static 代码块"); } { System.out.println("我是 Person 构造代码块"); } Person() { System.out.println("

Java初始化顺序

1.在类的内部,变量的定义的先后顺序决定了初始化顺序,即使变量定义散布于方法定义间,他们仍旧会在任何方法(包括构造器)被调用之前得到初始化 2.静态数据的初始化 class Bowl{ Bowl(int marker){ print("Bowl("+marker+")"); } void f1(int marker){ print("f1("+marker+")"); } class Table{ static Bowl bo