java与c++的初始化

1.不涉及类的继承体系的初始化顺序

public class InitialOrderTest {

       //静态初始化块1

       static {

//                     System.out.println(staticField);         //error! 说明静态初始化块和静态变量等级一样,按照先后出现顺序进行初始化。

                       int i = 2;

                       System.out.println(i);

              System.out.println("静态初始化块1");

       }

         

       //静态变量

       public static String staticField = "静态变量";

 

       //变量

       public String field = "变量";

 

       //静态初始化块2

       static {

              System.out.println(staticField);

              System.out.println("静态初始化块2");

       }

 

       //初始化块

       {

              System.out.println(field);

              System.out.println("初始化块");

       }

 

       //构造器

       public InitialOrderTest() {

              System.out.println("构造器");

       }

 

       public static void main(String[] args) {

              new InitialOrderTest();

       }

}

/*

http://hi.baidu.com/kresnik%5F9108/blog/item/9f204b86c8916baf0cf4d228.html

该文中有错误,静态初始化块和静态变量等级一样,按照先后出现顺序进行初始化。

*/

 

2.涉及类的继承体系的初始化

参见以上的网文。

 

在任何其他事物发生之前,将分配给对象的存储空间初始化为二进制的0。(thinking in java4中文版-8-P163

 

C++中的初始化顺序是:

1.  初始化基类中成员变量;

2.  调用基类构造函数

3.  初始化子类成员变量(不包括成员初始化列表中的)

4.  调用子类构造函数(按成员变量声明顺序)

 

#include <stdio.h>

 

class b{

public:

       int i;

       b(){printf("b/n");};

       b(int a){i=a;printf("b,i=%d/n",i);};

};

 

class base{

public:

       base(){printf("base/n");};

       b b0;

};

 

class a{

public:

       a(){printf("a/n");};

};

 

class derived : public base{

private:

       a a1;

       b b1;

public:

       derived(int i):b1(i){printf("derived/n");};

};

 

int main(){

       derived d(3);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值