Java中的Package.Import.Class以及和C++的比较(二)--类成员初始化及顺序

接下来主要都是关于Class的内容。


类成员初始化

在C++中,这样做是不行的:

class a
{
public:
       int a = 0;//不能初始化 编译失败
}
但是在java中,这是完全可行的。

在C++中,如果:

int a;

你会发现a的值是不确定的。

但是在java中,a的值肯定是0,因为java会自动初始化这个值为0


这是不是就意味着,在java里,int a = 0; 这样的做法是多余的

只要int a;就可以了,因为变量会被自动赋值为0?

希望有知道的人可以解答一下,先谢过。


补充一个事:

变量作为类的属性的时候才会有编译器帮你初始化为0,因为在给类分配完空间后,分配的空间里的所有内容会被自动赋值为0;

如果是局部变量,还是需要自己手动初始化


在java中,初始化方法还有一个“初始化块”,你完全可以在这个块里初始化,而不必在类的构造函数里。

另外,成员变量的初始化顺序是由定义的先后顺序决定的。比如:

class A
{
       public int a = 1;//第一个初始化
       public int b = 1;//第二个初始化
}

当一个类被实例化时,关于 类成员初始化的顺序,是这样的:

  1. 该类的所有static变量被自动初始化
  2. static变量定义初始化以及static初始化块--这2个的初始化顺序是按照定义的先后顺序来的,如果块在前,定义在后,那么先块初始化,后定义初始化;
  3. 然后创建对象,分配存储空间,存储空间清零,设置默认值
  4. 非static变量定义初始化以及非static初始化块--按照定义先后顺序;
  5. 构造函数初始化。
class A
{
	public int a = 9;                  //7-自动初始化为0 10-初始化为指定的9
	public int b = 0;                  //8-自动初始化为0 11-初始化为指定的0
	{
		a = 1;                     //                12
		b = 2;                     //                13
		c = 5;                     //                14
	}
	public int c = 3;                  //9-自动初始化为0 15-初始化为指定的3

	public static int sa = 5;          //1-自动初始化为0 3-初始化为指定的5
	static {
		sa = 2;                    //                4
		sb = 7;                    //                5
	}
	public static int sb = 3;          //2-自动初始化为0 6-初始化为指定的3

	A()
	{
		a = 16;					//                16
		sb = 50;				//                17
	}
}
	

上面的程序,数字代表初始化顺序。最后各变量的值为:

sa = 2;
sb = 50;
a = 16;
b = 2;
c = 3;

一个比较有趣事

java没有析构函数,这个和C++不同,因为java有内存回收机制。

但是java有一个函数,重载这个函数可以达到类似析构函数的效果,这个函数是:finalize。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值