对象实例化的过程

一个对象实例化的过程(假设对象是Person):

Person p = new Person();

  1. jvm会读取指定路径下的Person.class文件,并加载进内存,并会先加载Person的父类(如果有直接父类的情况下)
  2. 在堆内存中开辟空间,分配地址。
  3. 并在对象空间中,对对象中的属性进行默认初始化。
  4. 调用对应的构造函数进行初始化。
  5. 在构造函数中,第一行会先调用父类中的构造函数进行初始化。
  6. 父类初始化完毕后,再对子类的属性进行显示初始化。
  7. 再进行子类构造函数的特定初始化。
  8. 初始化完毕后,将地址值赋给引用变量。

案例

class Fu
{
	Fu()
	{
		super();
		show();
		return;
	}
	void show()
	{
		System.out.println("fu show");
	}
}

class Zi extends Fu
{
	int num = 8;
	Zi()
	{
		super();
		//-->通过super初始化父类内容时,子类的成员变量并未显式初始化。等super()父类初始化完毕后,才进行子类成员变量显式初始化。
		System.out.println("zi cons run..." + num);
		return;
	}
	void show()
	{
		System.out.println("zi show..." + num);
	}
}

class ExtendsDemo5
{
	public static void main(String[] args)
	{
		Zi z = new Zi();//输出答案为zi show...0 + zi cons run...8

		z.show();//输出答案为zi show...8

		/*
		zi show...0//父类构造函数初始化,子类show方法覆盖父类show方法,调用子类的show方法,此时成员变量并未初始化
		zi cons run...8
		zi show...8
		*/
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章