您的位置:首页 > 职场人生

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

2014-03-27 00:35 113 查看
---------------------- 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: