学习JAVA这门面向对象的语言,实质就是不断地建立类,并把类实例化为对象并调用方法。对于初学JAVA的人总搞清楚对象是如何实例化的,假如类之间存在继承关系,那就更糊涂了。下面咱们经过两个例题来讲明对象的实例化过程。 函数
编译并运行该程序会有如下输出 Static Block Employee Company:china soft Non-Static Block Employee phone:0755-51595599 Employee(String) Empoloyee() 下面咱们来对结果作分析: 1 在代码34行实例化对象时, 先对给静态变量分配内存空间并初始化,而后执行静态块。 所以,在这里会输出: Static Block Employee Company:china soft Employee Company:china soft的输出也说明是先初始化静态变量而后再执行静态块,不然company将为null。 2而后在内存中为Employee分配内存空间,并作默认初始化(即全部变量初始化为默认值,这里都初始化为null)。 3 默认初始化完成后,开始显示初始化。即执行第5行,将phone初始化"0755-51595599",而且执行非静态方法块;所以在这里会有如下输出: Non-Static Block Employee phone:0755-51595599 4 最后才调用默认构造函数,在默认构造函数中调用了带参数的构造函数,因此在这里先输出带参数构造函数中的:Employee(String),而后才输出:Empoloyee()。 学习
例2: spa
上面的代码中Manager继承了前面写的Employee类,当咱们编译并运行Manager类,会产生如下的输出: 对象
Static Block Employee Company:china soft Sub Static Block Manager department:sale Non-Static Block Employee phone:0755-51595599 Employee(String) Empoloyee() Sub Non-Static Block Manager salary:8000 Manager(String) Manager() 下面咱们对结果作分析: 1 在行34实例化对象时,因为Manager继承了Employee,因此先从父类Employee开始;先给父类静态变量分配内存空间并初始化,而后执行父类静态块。而后再给子类静态变量分配内存空间并初始化,而后执行子类静态块,因此会获得如下输出: Static Block Employee Company:china soft Sub Static Block Manager department:sale 继承
2而后在内存中为父类Employee分配内存空间,并作默认初始化;再为子类Manager分配内存空间,并作默认初始化。 3默认初始化完成后,从父类开始显示初始化并执行非静态方法块和构造函数,而后再子类开始显示初始化并执行非静态方法块和构造函数。所以会产生如下的输出: Non-Static Block Employee phone:0755-51595599 Employee(String) Empoloyee() Sub Non-Static Block Manager salary:8000 Manager(String) Manager() 内存
总结以上内容,能够获得对象初始化过程: 编译
1、 若是存在继承关系,就先父类后子类; 变量
2 、若是在类内有静态变量和静态块,就先静态后非静态,最后才是构造函数; 构造函数
3 、继承关系中,必需要父类初始化完成后,才初始化子类。 程序