构造函数及其成员变量初始化顺序详解

package demo;
/**
 * 
 * @author Administrator
 *	think in java the forth edition
 * 
 */
public class ConstractInit extends PortableLunch
{
	private Meal m=new Meal();
	private Cheese cheese=new Cheese();
	private Bread b=new Bread();
	
	public ConstractInit()
	{
		/* 
                 *  1.在任何事物发生之前,将分配给对象的存储空间初始化成二进制的0
		 *  2.调用构造方法时,默认会调用父类的构造方法,此时成员变量还未初始化,此步骤会一直递归调用父类的构造方法,
		 *	    直到根基类(Bread)没有父类(所有的成员变量均为初始化)
		 *  3. 到达根基类后,然后开始初始化成员变量,成员变量初始化完成之后,执行构造器主体,
		 *    主体调用完成之后然后递归开始(与第一步相反方向)初始化其子类的成员变量,直到最底层的子类(此示例为ConstractInit)
		 *  4    最底层的子类(ConstractInit)成员变量初始化完成之后,开始执行自身构造器主体
		 */
		System.out.println("ConstractInit");
	}
	public static void main(String[] args)
	{
		new ConstractInit();
	}

}

class Meal
{
	private int a=initMeal();
	Meal()
	{
		System.out.println("Meal");
	}
	
	private int initMeal()
	{
		System.out.println("Meal attribute initazlized");
		return 1;
	}
}

class Bread
{
	private int b=initBread();
	public Bread()
	{
		System.out.println("Bread");
	}
	
	private int initBread()
	{
		System.out.println("Bread attribute initazlized");
		return 1;
	}
}

class Cheese
{
	private int c=initCheese();
	public Cheese()
	{
		System.out.println("Cheese");
	}
	
	private int initCheese()
	{
		System.out.println("Cheese attribute initazlized");
		return 1;
	}
}

class Lettuce
{
	public Lettuce()
	{
		System.out.println("Lettuce");
	}
}

class Lunch extends Meal
{
	private int d=initLunch();
	public Lunch()
	{
		System.out.println("Lunch");
	}
	
	public int initLunch()
	{
		System.out.println("Lunch attribute initazlized");
		return 1;
	}
	
}

class PortableLunch extends Lunch
{
	private int e=initPortableLunch();
		PortableLunch()
		{
			System.out.println("PortableLunch");
		}
		
		public int initPortableLunch()
		{
			System.out.println("PortableLunch attribute initazlized");
			return 1;
		}
}



最后打印结构为:

Meal attribute initazlized
Meal
Lunch attribute initazlized
Lunch
PortableLunch attribute initazlized
PortableLunch
Meal attribute initazlized
Meal
Cheese attribute initazlized
Cheese
Bread attribute initazlized
Bread
ConstractInit





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值