黑马程序员——Java中对象初始化的顺序与原理 总结

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------



顺序: 
(有子父类继承关系的情况下)
成员变量默认初始化--->父类构造器初始化--->成员变量显示初始化--->子类构造代码块初始化---->子类构造器初始化


源代码:

	Fu(){
		System.out.println("fu....run");
		show();
	}
	void show(){
		System.out.println("最上面的show()");
	}
}
class Zi extends Fu{
	int num=9;
	//子类构造代码块
	{
		System.out.println("子代码快"+num);

		//在子类代码块中为成员变量赋值为10
		num=10;
	}

	//子类构造器
	Zi(){
			super();//隐式语句,指向父类

			System.out.println("子类构造器中的"+num);
	}
	void show(){
			System.out.println("最下下面的show()"+num);

	}
}
class ChushiDemo{
	public static void main(String[]args){
		new Zi();
	}
}
输出结果为:
---------- java -----
fu....run
最下下面的show()0
子代码快9
子类构造器中的10
---------- java -----
 
明确对象初始化的顺序与原理: 



情况一:
[有继承关系情况下]


new对象,即刻成员变量默认(隐式)初始化


(num被系统赋予0),然后,父类构造器初始化,再然后调用show()


方法,此刻父类构造器完成;然后成员变量显示初始化(num被赋予9);


再然后,构造代码块初始化,再然后子类构造器完成初始化.


情况二:
[无继承关系情况下]  


new对象,即刻成员变量默认(隐式)初始化


(num被系统赋予0),然后成员变量显示初始化(num被赋予9);再然后


构造代码初始化,再然后,构造器初始化.


以上两种情况区别就在于: super();语句.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值