黑马程序员_对象初始化过程

---------------------- android培训 、 java培训 、 期待与您交流! ----------------------


对象初始化过程

1.加载类

2.堆内存分配空间

3.属性进行默认初始化

4.调用构造函数----->1.构造函数默认第一句super();   2.显示初始化    3.构造代码块初始化

5.调用父类构造函数----->同上

6.属性显示初始化

7.构造代码块初始化

8.构造函数自定义初始化

注意:不创建对象,构造代码块和构造器都不运行。

运行过程--->new 对象  先执行静态代码块--->在执行构造代码块--->再执行构造代码块里面的内容

加载过程--->先加载静态(...)--->构造函数--->在构造函数里加载构造代码块。

结合实例分析:

class Demo
{
	static int i=2;//随着类的加载而加载。加载到方法区中的静态区中。
	int j=9;//定义了一个属性,也就是一个成员变量,也叫实例变量。当对象存在时,该变量存在于堆内存的对象中。

	static{//静态代码块。随着类的加载而执行。
	   System.out.println("静态代码块...i="+i);
	}
	
	Demo(int a){//带一个int参数的构造函数。
		this();//调用了本类中空参数的构造函数。
	   System.out.println("有参的构造函数...i="+i+",j="+j);
	}

	{ //构造代码块,定义在类中的代码块,用于给所有对象进行初始化动作的代码块。
	   System.out.println("构造代码块...i="+i+",j="+j);
	}

	static void show(){//静态函数。函数中没有访问非静态的成员。
	    System.out.println("静态show方法...i="+i);
	}

	Demo(){// 空参数的构造函数。 
	   System.out.println("无参的构造函数..."+",j="+j);
	}
}
class Test
{
	public static void main(String[] args)
	{
		Demo d = new Demo(1);//通过Day06.class类文件创建了对象。
		int a = Demo.i;

		System.out.println("----");

		new Demo();
		show();
	}

	public static void show()
		{}
}

执行过程解析:
1. 执行静态代码块:静态代码块...i=2

 

2. 再执行构造代码块:构造代码块...i=2,j=9
 
3. Demo(int a) 进栈后,第一行this()调用了本类中空参数的构造函数。所以Demo()进栈

 

4. Demo()第一句默认super(),之后属性显示初始化,构造代码块初始化,以后执行print:无参的构造函数...,j=9

 

5. Demo()出栈,接着执行Demo(int a):有参的构造函数...i=2,j=9   Demo(int a)出栈 堆内存分配空间释放,等待垃圾回收

 

6. 执行int a = Demo.i; System.out.println("----");

 

7. new Demo()调用空参构造函数;

 

8. 执行构造代码块...i=2,j=9

 

9.无参的构造函数...,j=9

 奋斗奋斗奋斗

 

---------------------- android培训 、 java培训 、 期待与您交流! ----------------------
详细请查看:www.itheima.com
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章